Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


recipes/ffpyplayer/__init__.py f8b3e3760b831745cf10d97aeae64e9c00a136a9 (f8b3e376) Text, 59.35 KB

Tff7b72from T7ee787osT7ee787.T7ee787path Tff7b72import Te6edf3join

Tff7b72from T7ee787osT7ee787.T7ee787path Tff7b72import Te6edf3basenameTb4b4b4, Te6edf3dirnameTb4b4b4, Te6edf3existsTb4b4b4, Te6edf3isdirTb4b4b4, Te6edf3isfileTb4b4b4, Te6edf3joinTb4b4b4, Te6edf3realpathTb4b4b4, Te6edf3split
Tff7b72import T7ee787glob

Tff7b72import T7ee787hashlib
Tff7b72from T7ee787re Tff7b72import Te6edf3match

Tff7b72import T7ee787sh
Tff7b72import T7ee787shutil
Tff7b72import T7ee787fnmatch
Tff7b72import T7ee787zipfile
Tff7b72import T7ee787urllibT7ee787.T7ee787request
Tff7b72from T7ee787urllibT7ee787.T7ee787request Tff7b72import Te6edf3urlretrieve
Tff7b72from T7ee787os Tff7b72import Te6edf3listdirTb4b4b4, Te6edf3unlinkTb4b4b4, Te6edf3environTb4b4b4, Te6edf3curdirTb4b4b4, Te6edf3walk
Tff7b72from T7ee787sys Tff7b72import Te6edf3stdout
Tff7b72from T7ee787wheelT7ee787.T7ee787wheelfile Tff7b72import Te6edf3WheelFile
Tff7b72from T7ee787wheelT7ee787.T7ee787cliT7ee787.T7ee787tags Tff7b72import Te6edf3tags Tff7b72as Te6edf3wheel_tags
Tff7b72import T7ee787time
Tff7b72tryTb4b4b4:
Tff7b72from T7ee787urlparse Tff7b72import Te6edf3urlparse
Tff7b72except Tf85149ImportErrorTb4b4b4:
Tff7b72from T7ee787urllibT7ee787.T7ee787parse Tff7b72import Te6edf3urlparse

Tff7b72import T7ee787packagingT7ee787.T7ee787version

Tff7b72from T7ee787pythonforandroidT7ee787.T7ee787logger Tff7b72import Tb4b4b4(
Te6edf3loggerTb4b4b4, Te6edf3infoTb4b4b4, Te6edf3warningTb4b4b4, Te6edf3debugTb4b4b4, Te6edf3shprintTb4b4b4, Te6edf3info_mainTb4b4b4, Te6edf3errorTb4b4b4)
Tff7b72from T7ee787pythonforandroidT7ee787.T7ee787util Tff7b72import Tb4b4b4(
Te6edf3current_directoryTb4b4b4, Te6edf3ensure_dirTb4b4b4, Te6edf3BuildInterruptingExceptionTb4b4b4, Te6edf3rmdirTb4b4b4, Te6edf3moveTb4b4b4,
Te6edf3touchTb4b4b4)
Tff7b72from T7ee787pythonforandroidT7ee787.T7ee787util Tff7b72import Te6edf3load_source Tff7b72as Te6edf3import_recipe


Te6edf3url_opener Tff7b72= Te6edf3urllibTff7b72.Td2a8ffrequestTff7b72.Td2a8ffbuild_openerTb4b4b4(Tb4b4b4)
Te6edf3url_orig_headers Tff7b72= Te6edf3url_openerTff7b72.Td2a8ffaddheaders
Te6edf3urllibTff7b72.Td2a8ffrequestTff7b72.Td2a8ffinstall_openerTb4b4b4(Te6edf3url_openerTb4b4b4)


Tff7b72class T56d364RecipeMetaTb4b4b4(Tffa657typeTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__new__Tb4b4b4(Tff7b72clsTb4b4b4, Te6edf3nameTb4b4b4, Te6edf3basesTb4b4b4, Te6edf3dctTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3name Tff7b72!= Ta5d6ff'Ta5d6ffRecipeTa5d6ff'Tb4b4b4:
Tff7b72if Ta5d6ff'Ta5d6ffurlTa5d6ff' Tff7b72in Te6edf3dctTb4b4b4:
Te6edf3dctTb4b4b4[Ta5d6ff'Ta5d6ff_urlTa5d6ff'Tb4b4b4] Tff7b72= Te6edf3dctTff7b72.Td2a8ffpopTb4b4b4(Ta5d6ff'Ta5d6ffurlTa5d6ff'Tb4b4b4)
Tff7b72if Ta5d6ff'Ta5d6ffversionTa5d6ff' Tff7b72in Te6edf3dctTb4b4b4:
Te6edf3dctTb4b4b4[Ta5d6ff'Ta5d6ff_versionTa5d6ff'Tb4b4b4] Tff7b72= Te6edf3dctTff7b72.Td2a8ffpopTb4b4b4(Ta5d6ff'Ta5d6ffversionTa5d6ff'Tb4b4b4)

Tff7b72return Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__new__Tb4b4b4(Tff7b72clsTb4b4b4, Te6edf3nameTb4b4b4, Te6edf3basesTb4b4b4, Te6edf3dctTb4b4b4)


Tff7b72class T56d364RecipeTb4b4b4(Te6edf3metaclassTff7b72=Te6edf3RecipeMetaTb4b4b4)Tb4b4b4:
Te6edf3_url Tff7b72= Tff7b72None
T8b949e'''The address from which the recipe may be downloaded. This is not
essential, it may be omitted if the source is available some other
way, such as via the :class:`IncludedFilesBehaviour` mixin.

If the url includes the version, you may (and probably should)
replace this with ``{version}``, which will automatically be
replaced by the :attr:`version` string during download.

.. note:: Methods marked (internal) are used internally and you
probably don't need to call them, but they are available
if you want.
'''

Te6edf3_version Tff7b72= Tff7b72None
T8b949e'''A string giving the version of the software the recipe describes,
e.g. ``2.0.3`` or ``master``.'''

Te6edf3md5sum Tff7b72= Tff7b72None
T8b949e'''The md5sum of the source from the :attr:`url`. Non-essential, but
you should try to include this, it is used to check that the download
finished correctly.
'''

Te6edf3sha512sum Tff7b72= Tff7b72None
T8b949e'''The sha512sum of the source from the :attr:`url`. Non-essential, but
you should try to include this, it is used to check that the download
finished correctly.
'''

Te6edf3blake2bsum Tff7b72= Tff7b72None
T8b949e'''The blake2bsum of the source from the :attr:`url`. Non-essential, but
you should try to include this, it is used to check that the download
finished correctly.
'''

Te6edf3depends Tff7b72= Tb4b4b4[Tb4b4b4]
T8b949e'''A list containing the names of any recipes that this recipe depends on.
'''

Te6edf3conflicts Tff7b72= Tb4b4b4[Tb4b4b4]
T8b949e'''A list containing the names of any recipes that are known to be
incompatible with this one.'''

Te6edf3opt_depends Tff7b72= Tb4b4b4[Tb4b4b4]
T8b949e'''A list of optional dependencies, that must be built before this
recipe if they are built at all, but whose presence is not essential.'''

Te6edf3patches Tff7b72= Tb4b4b4[Tb4b4b4]
T8b949e'''A list of patches to apply to the source. Values can be either a string
referring to the patch file relative to the recipe dir, or a tuple of the
string patch file and a callable, which will receive the kwargs `arch` and
`recipe`, which should return True if the patch should be applied.'''

Te6edf3python_depends Tff7b72= Tb4b4b4[Tb4b4b4]
T8b949e'''A list of pure-Python packages that this package requires. These
packages will NOT be available at build time, but will be added to the
list of pure-Python packages to install via pip. If you need these packages
at build time, you must create a recipe.'''

Te6edf3archs Tff7b72= Tb4b4b4[Ta5d6ff'Ta5d6ffarmeabiTa5d6ff'Tb4b4b4] T8b949e# Not currently implemented properly

Te6edf3built_libraries Tff7b72= Tb4b4b4{Tb4b4b4}
T8b949e"""Each recipe that builds a system library (e.g.:libffi, openssl, etc...)
should contain a dict holding the relevant information of the library. The
keys should be the generated libraries and the values the relative path of
the library inside his build folder. This dict will be used to perform
different operations:
- copy the library into the right location, depending on if it's shared
or static)
- check if we have to rebuild the library

Here an example of how it would look like for `libffi` recipe:

- `built_libraries = {'libffi.so': '.libs'}`

.. note:: in case that the built library resides in recipe's build
directory, you can set the following values for the relative
path: `'.', None or ''`
"""

Te6edf3need_stl_shared Tff7b72= Tff7b72False
T8b949e'''Some libraries or python packages may need the c++_shared in APK.
We can automatically do this for any recipe if we set this property to
`True`'''

Te6edf3stl_lib_name Tff7b72= Ta5d6ff'Ta5d6ffc++_sharedTa5d6ff'
T8b949e'''
The default STL shared lib to use: `c++_shared`.

.. note:: Android NDK version > 17 only supports 'c++_shared', because
starting from NDK r18 the `gnustl_shared` lib has been deprecated.
'''

Tff7b72def Td2a8ffget_stl_libraryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3joinTb4b4b4(
Te6edf3archTff7b72.Td2a8ffndk_lib_dirTb4b4b4,
Ta5d6ff'Ta5d6fflibTffd700{name}Ta5d6ff.soTa5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3nameTff7b72=Tff7b72selfTff7b72.Td2a8ffstl_lib_nameTb4b4b4)Tb4b4b4,
Tb4b4b4)

Tff7b72def Td2a8ffinstall_stl_libTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffhas_libTb4b4b4(
Te6edf3archTff7b72.Td2a8ffarchTb4b4b4, Ta5d6ff'Ta5d6fflibTffd700{name}Ta5d6ff.soTa5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3nameTff7b72=Tff7b72selfTff7b72.Td2a8ffstl_lib_nameTb4b4b4)
Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinstall_libsTb4b4b4(Te6edf3archTb4b4b4, Tff7b72selfTff7b72.Td2a8ffget_stl_libraryTb4b4b4(Te6edf3archTb4b4b4)Tb4b4b4)

Tf0883e@property
Tff7b72def Td2a8ffversionTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3key Tff7b72= Ta5d6ff'Ta5d6ffVERSION_Ta5d6ff' Tff7b72+ Tff7b72selfTff7b72.Td2a8ffname
Tff7b72return Te6edf3environTff7b72.Td2a8ffgetTb4b4b4(Te6edf3keyTb4b4b4, Tff7b72selfTff7b72.Td2a8ff_versionTb4b4b4)

Tf0883e@property
Tff7b72def Td2a8ffurlTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3key Tff7b72= Ta5d6ff'Ta5d6ffURL_Ta5d6ff' Tff7b72+ Tff7b72selfTff7b72.Td2a8ffname
Tff7b72return Te6edf3environTff7b72.Td2a8ffgetTb4b4b4(Te6edf3keyTb4b4b4, Tff7b72selfTff7b72.Td2a8ff_urlTb4b4b4)

Tf0883e@property
Tff7b72def Td2a8ffversioned_urlTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e'''A property returning the url of the recipe with ``{version}``
replaced by the :attr:`url`. If accessing the url, you should use this
property, *not* access the url directly.'''
Tff7b72if Tff7b72selfTff7b72.Td2a8ffurl Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72return Tff7b72selfTff7b72.Td2a8ffurlTff7b72.Td2a8ffformatTb4b4b4(Te6edf3versionTff7b72=Tff7b72selfTff7b72.Td2a8ffversionTb4b4b4)

Tff7b72def Td2a8ffdownload_fileTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3urlTb4b4b4, Te6edf3targetTb4b4b4, Te6edf3cwdTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
T8b949e"""
(internal) Download an ``url`` to a ``target``.
"""
Tff7b72if Tff7b72not Te6edf3urlTb4b4b4:
Tff7b72return

Te6edf3infoTb4b4b4(Ta5d6ff'Ta5d6ffDownloading Tffd700{}Ta5d6ff from Tffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4, Te6edf3urlTb4b4b4)Tb4b4b4)

Tff7b72if Te6edf3cwdTb4b4b4:
Te6edf3target Tff7b72= Te6edf3joinTb4b4b4(Te6edf3cwdTb4b4b4, Te6edf3targetTb4b4b4)

Te6edf3parsed_url Tff7b72= Te6edf3urlparseTb4b4b4(Te6edf3urlTb4b4b4)
Tff7b72if Te6edf3parsed_urlTff7b72.Td2a8ffscheme Tff7b72in Tb4b4b4(Ta5d6ff'Ta5d6ffhttpTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffhttpsTa5d6ff'Tb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffreport_hookTb4b4b4(Te6edf3indexTb4b4b4, Te6edf3blksizeTb4b4b4, Te6edf3sizeTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3size Tff7b72<Tff7b72= T79c0ff0Tb4b4b4:
Te6edf3progression Tff7b72= Ta5d6ff'Tffd700{0}Ta5d6ff bytesTa5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3index Tff7b72* Te6edf3blksizeTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3progression Tff7b72= Ta5d6ff'Tffd700{0:.2f}Ta5d6ff%Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(
Te6edf3index Tff7b72* Te6edf3blksize Tff7b72* T79c0ff100. Tff7b72/ Tffa657floatTb4b4b4(Te6edf3sizeTb4b4b4)Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffCITa5d6ff" Tff7b72not Tff7b72in Te6edf3environTb4b4b4:
Te6edf3stdoutTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6ff'Ta5d6ff- Download Tffd700{}Tffea00\rTa5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3progressionTb4b4b4)Tb4b4b4)
Te6edf3stdoutTff7b72.Td2a8ffflushTb4b4b4(Tb4b4b4)

Tff7b72if Te6edf3existsTb4b4b4(Te6edf3targetTb4b4b4)Tb4b4b4:
Te6edf3unlinkTb4b4b4(Te6edf3targetTb4b4b4)

T8b949e# Download item with multiple attempts (for bad connections):
Te6edf3attempts Tff7b72= T79c0ff0
Te6edf3seconds Tff7b72= T79c0ff1
Tff7b72while Tff7b72TrueTb4b4b4:
Tff7b72tryTb4b4b4:
T8b949e# jqueryui.com returns a 403 w/ the default user agent
T8b949e# Mozilla/5.0 doesnt handle redirection for liblzma
Te6edf3url_openerTff7b72.Td2a8ffaddheaders Tff7b72= Tb4b4b4[Tb4b4b4(Ta5d6ff'Ta5d6ffUser-agentTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffWget/1.0Ta5d6ff'Tb4b4b4)Tb4b4b4]
Te6edf3urlretrieveTb4b4b4(Te6edf3urlTb4b4b4, Te6edf3targetTb4b4b4, Te6edf3report_hookTb4b4b4)
Tff7b72except Tf85149OSError Tff7b72as Te6edf3eTb4b4b4:
Te6edf3attempts Tff7b72+Tff7b72= T79c0ff1
Tff7b72if Te6edf3attempts Tff7b72>Tff7b72= T79c0ff5Tb4b4b4:
Tff7b72raise
Te6edf3stdoutTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6ff'Ta5d6ffDownload failed: Tffd700{}Ta5d6ff; retrying in Tffd700{}Ta5d6ff second(s)...Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3eTb4b4b4, Te6edf3secondsTb4b4b4)Tb4b4b4)
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Te6edf3secondsTb4b4b4)
Te6edf3seconds Tff7b72*Tff7b72= T79c0ff2
Tff7b72continue
Tff7b72finallyTb4b4b4:
Te6edf3url_openerTff7b72.Td2a8ffaddheaders Tff7b72= Te6edf3url_orig_headers
Tff7b72break
Tff7b72return Te6edf3target
Tff7b72elif Te6edf3parsed_urlTff7b72.Td2a8ffscheme Tff7b72in Tb4b4b4(Ta5d6ff'Ta5d6ffgitTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffgit+fileTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffgit+sshTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffgit+httpTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffgit+httpsTa5d6ff'Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3isdirTb4b4b4(Te6edf3targetTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3urlTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff'Ta5d6ffgit+Ta5d6ff'Tb4b4b4)Tb4b4b4:
Te6edf3url Tff7b72= Te6edf3urlTb4b4b4[T79c0ff4Tb4b4b4:Tb4b4b4]
T8b949e# if 'version' is specified, do a shallow clone
Tff7b72if Tff7b72selfTff7b72.Td2a8ffversionTb4b4b4:
Te6edf3ensure_dirTb4b4b4(Te6edf3targetTb4b4b4)
Tff7b72with Te6edf3current_directoryTb4b4b4(Te6edf3targetTb4b4b4)Tb4b4b4:
Te6edf3shprintTb4b4b4(Te6edf3shTff7b72.Td2a8ffgitTb4b4b4, Ta5d6ff'Ta5d6ffinitTa5d6ff'Tb4b4b4)
Te6edf3shprintTb4b4b4(Te6edf3shTff7b72.Td2a8ffgitTb4b4b4, Ta5d6ff'Ta5d6ffremoteTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffaddTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6fforiginTa5d6ff'Tb4b4b4, Te6edf3urlTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3shprintTb4b4b4(Te6edf3shTff7b72.Td2a8ffgitTb4b4b4, Ta5d6ff'Ta5d6ffcloneTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff--recursiveTa5d6ff'Tb4b4b4, Te6edf3urlTb4b4b4, Te6edf3targetTb4b4b4)
Tff7b72with Te6edf3current_directoryTb4b4b4(Te6edf3targetTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffversionTb4b4b4:
Te6edf3shprintTb4b4b4(Te6edf3shTff7b72.Td2a8ffgitTb4b4b4, Ta5d6ff'Ta5d6fffetchTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff--tagsTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff--depthTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff1Ta5d6ff'Tb4b4b4)
Te6edf3shprintTb4b4b4(Te6edf3shTff7b72.Td2a8ffgitTb4b4b4, Ta5d6ff'Ta5d6ffcheckoutTa5d6ff'Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffversionTb4b4b4)
Te6edf3branch Tff7b72= Te6edf3shTff7b72.Td2a8ffgitTb4b4b4(Ta5d6ff'Ta5d6ffbranchTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff--show-currentTa5d6ff'Tb4b4b4)
Tff7b72if Te6edf3branchTb4b4b4:
Te6edf3shprintTb4b4b4(Te6edf3shTff7b72.Td2a8ffgitTb4b4b4, Ta5d6ff'Ta5d6ffpullTa5d6ff'Tb4b4b4)
Te6edf3shprintTb4b4b4(Te6edf3shTff7b72.Td2a8ffgitTb4b4b4, Ta5d6ff'Ta5d6ffpullTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff--recurse-submodulesTa5d6ff'Tb4b4b4)
Te6edf3shprintTb4b4b4(Te6edf3shTff7b72.Td2a8ffgitTb4b4b4, Ta5d6ff'Ta5d6ffsubmoduleTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffupdateTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff--recursiveTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff--initTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff--depthTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff1Ta5d6ff'Tb4b4b4)
Tff7b72return Te6edf3target

Tff7b72def Td2a8ffapply_patchTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3filenameTb4b4b4, Te6edf3archTb4b4b4, Te6edf3build_dirTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
T8b949e"""
Apply a patch from the current recipe directory into the current
build directory.

.. versionchanged:: 0.6.0
Add ability to apply patch from any dir via kwarg `build_dir`'''
"""
Te6edf3infoTb4b4b4(Ta5d6ff"Ta5d6ffApplying patch Tffd700{}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3filenameTb4b4b4)Tb4b4b4)
Te6edf3build_dir Tff7b72= Te6edf3build_dir Tff7b72if Te6edf3build_dir Tff7b72else Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTb4b4b4)
Te6edf3filename Tff7b72= Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_recipe_dirTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3filenameTb4b4b4)
Te6edf3shprintTb4b4b4(Te6edf3shTff7b72.Td2a8ffpatchTb4b4b4, Ta5d6ff"Ta5d6ff-tTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff-dTa5d6ff"Tb4b4b4, Te6edf3build_dirTb4b4b4, Ta5d6ff"Ta5d6ff-p1Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff-iTa5d6ff"Tb4b4b4, Te6edf3filenameTb4b4b4, Te6edf3_tailTff7b72=T79c0ff10Tb4b4b4)

Tff7b72def Td2a8ffcopy_fileTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3filenameTb4b4b4, Te6edf3destTb4b4b4)Tb4b4b4:
Te6edf3infoTb4b4b4(Ta5d6ff"Ta5d6ffCopy Tffd700{}Ta5d6ff to Tffd700{}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3filenameTb4b4b4, Te6edf3destTb4b4b4)Tb4b4b4)
Te6edf3filename Tff7b72= Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_recipe_dirTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3filenameTb4b4b4)
Te6edf3dest Tff7b72= Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffbuild_dirTb4b4b4, Te6edf3destTb4b4b4)
Te6edf3shutilTff7b72.Td2a8ffcopyTb4b4b4(Te6edf3filenameTb4b4b4, Te6edf3destTb4b4b4)

Tff7b72def Td2a8ffappend_fileTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3filenameTb4b4b4, Te6edf3destTb4b4b4)Tb4b4b4:
Te6edf3infoTb4b4b4(Ta5d6ff"Ta5d6ffAppend Tffd700{}Ta5d6ff to Tffd700{}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3filenameTb4b4b4, Te6edf3destTb4b4b4)Tb4b4b4)
Te6edf3filename Tff7b72= Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_recipe_dirTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3filenameTb4b4b4)
Te6edf3dest Tff7b72= Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffbuild_dirTb4b4b4, Te6edf3destTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3filenameTb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fdTb4b4b4:
Te6edf3data Tff7b72= Te6edf3fdTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3destTb4b4b4, Ta5d6ff"Ta5d6ffabTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fdTb4b4b4:
Te6edf3fdTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3dataTb4b4b4)

Tf0883e@property
Tff7b72def Td2a8ffnameTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e'''The name of the recipe, the same as the folder containing it.'''
Te6edf3modname Tff7b72= Tff7b72selfTff7b72.Td2a8ff__class__Tff7b72.Td2a8ff__module__
Tff7b72return Te6edf3modnameTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff.Ta5d6ff"Tb4b4b4, T79c0ff2Tb4b4b4)Tb4b4b4[Tff7b72-T79c0ff1Tb4b4b4]

Tf0883e@property
Tff7b72def Td2a8fffiltered_archsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e'''Return archs of self.ctx that are valid build archs
for the Recipe.'''
Te6edf3result Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3arch Tff7b72in Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffarchsTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffarchs Tff7b72or Tb4b4b4(Te6edf3archTff7b72.Td2a8ffarch Tff7b72in Tff7b72selfTff7b72.Td2a8ffarchsTb4b4b4)Tb4b4b4:
Te6edf3resultTff7b72.Td2a8ffappendTb4b4b4(Te6edf3archTb4b4b4)
Tff7b72return Te6edf3result

Tff7b72def Td2a8ffcheck_recipe_choicesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e'''Checks what recipes are being built to see which of the alternative
and optional dependencies are being used,
and returns a list of these.'''
Te6edf3recipes Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3built_recipes Tff7b72= Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffrecipe_build_order
Tff7b72for Te6edf3recipe Tff7b72in Tff7b72selfTff7b72.Td2a8ffdependsTb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3recipeTb4b4b4, Tb4b4b4(Tffa657tupleTb4b4b4, Tffa657listTb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3alternative Tff7b72in Te6edf3recipeTb4b4b4:
Tff7b72if Te6edf3alternative Tff7b72in Te6edf3built_recipesTb4b4b4:
Te6edf3recipesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3alternativeTb4b4b4)
Tff7b72break
Tff7b72for Te6edf3recipe Tff7b72in Tff7b72selfTff7b72.Td2a8ffopt_dependsTb4b4b4:
Tff7b72if Te6edf3recipe Tff7b72in Te6edf3built_recipesTb4b4b4:
Te6edf3recipesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3recipeTb4b4b4)
Tff7b72return Tffa657sortedTb4b4b4(Te6edf3recipesTb4b4b4)

Tff7b72def Td2a8ffget_opt_depends_in_listTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3recipesTb4b4b4)Tb4b4b4:
T8b949e'''Given a list of recipe names, returns those that are also in
self.opt_depends.
'''
Tff7b72return Tb4b4b4[Te6edf3recipe Tff7b72for Te6edf3recipe Tff7b72in Te6edf3recipes Tff7b72if Te6edf3recipe Tff7b72in Tff7b72selfTff7b72.Td2a8ffopt_dependsTb4b4b4]

Tff7b72def Td2a8ffget_build_container_dirTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
T8b949e'''Given the arch name, returns the directory where it will be
built.

This returns a different directory depending on what
alternative or optional dependencies are being built.
'''
Te6edf3dir_name Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_dir_nameTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffbuild_dirTb4b4b4, Ta5d6ff'Ta5d6ffother_buildsTa5d6ff'Tb4b4b4,
Te6edf3dir_nameTb4b4b4, Ta5d6ff'Tffd700{}Ta5d6ff__ndk_target_Tffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3archTb4b4b4, Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffndk_apiTb4b4b4)Tb4b4b4)

Tff7b72def Td2a8ffget_dir_nameTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3choices Tff7b72= Tff7b72selfTff7b72.Td2a8ffcheck_recipe_choicesTb4b4b4(Tb4b4b4)
Te6edf3dir_name Tff7b72= Ta5d6ff'Ta5d6ff-Ta5d6ff'Tff7b72.Td2a8ffjoinTb4b4b4(Tb4b4b4[Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4] Tff7b72+ Te6edf3choicesTb4b4b4)
Tff7b72return Te6edf3dir_name

Tff7b72def Td2a8ffget_build_dirTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
T8b949e'''Given the arch name, returns the directory where the
downloaded/copied package will be built.'''

Tff7b72return Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_build_container_dirTb4b4b4(Te6edf3archTb4b4b4)Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)

Tff7b72def Td2a8ffget_recipe_dirTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""
Returns the local recipe directory or defaults to the core recipe
directory.
"""
Tff7b72if Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8fflocal_recipes Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3local_recipe_dir Tff7b72= Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8fflocal_recipesTb4b4b4, Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)
Tff7b72if Te6edf3existsTb4b4b4(Te6edf3local_recipe_dirTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3local_recipe_dir
Tff7b72return Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffroot_dirTb4b4b4, Ta5d6ff'Ta5d6ffrecipesTa5d6ff'Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)

T8b949e# Public Recipe API to be subclassed if needed

Tff7b72def Td2a8ffdownload_if_necessaryTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3info_mainTb4b4b4(Ta5d6ff'Ta5d6ffDownloading Tffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)Tb4b4b4)
Te6edf3user_dir Tff7b72= Te6edf3environTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff'Ta5d6ffP4A_Tffd700{}Ta5d6ff_DIRTa5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnameTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3user_dir Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3infoTb4b4b4(Ta5d6ff'Ta5d6ffP4A_Tffd700{}Ta5d6ff_DIR is set, skipping download for Tffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4, Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)Tb4b4b4)
Tff7b72return
Tff7b72selfTff7b72.Td2a8ffdownloadTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffdownloadTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffurl Tff7b72is Tff7b72NoneTb4b4b4:
Te6edf3infoTb4b4b4(Ta5d6ff'Ta5d6ffSkipping Tffd700{}Ta5d6ff download as no URL is setTa5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)Tb4b4b4)
Tff7b72return

Te6edf3url Tff7b72= Tff7b72selfTff7b72.Td2a8ffversioned_url
Te6edf3expected_digests Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72for Te6edf3alg Tff7b72in Tffa657setTb4b4b4(Te6edf3hashlibTff7b72.Td2a8ffalgorithms_guaranteedTb4b4b4) Tff7b72| Tffa657setTb4b4b4(Tb4b4b4(Ta5d6ff'Ta5d6ffmd5Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffsha512Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffblake2bTa5d6ff'Tb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3expected_digest Tff7b72= Tffa657getattrTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3alg Tff7b72+ Ta5d6ff'Ta5d6ffsumTa5d6ff'Tb4b4b4) Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3alg Tff7b72+ Ta5d6ff'Ta5d6ffsumTa5d6ff'Tb4b4b4) Tff7b72else Tff7b72None
Te6edf3ma Tff7b72= Te6edf3matchTb4b4b4(Ta5d6ffuTa5d6ff'Ta5d6ff^(.+)#Ta5d6ff' Tff7b72+ Te6edf3alg Tff7b72+ Ta5d6ffuTa5d6ff'Ta5d6ff=([0-9a-f]Ta5d6ff{Ta5d6ff32,})$Ta5d6ff'Tb4b4b4, Te6edf3urlTb4b4b4)
Tff7b72if Te6edf3maTb4b4b4: T8b949e# fragmented URL?
Tff7b72if Te6edf3expected_digestTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(
Tb4b4b4(Ta5d6ff'Ta5d6ffReceived Tffd700{}Ta5d6ffsum from both the Tffd700{}Ta5d6ff recipe Ta5d6ff'
Ta5d6ff'Ta5d6ffand its urlTa5d6ff'Tb4b4b4)Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3algTb4b4b4, Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)Tb4b4b4)
Te6edf3url Tff7b72= Te6edf3maTff7b72.Td2a8ffgroupTb4b4b4(T79c0ff1Tb4b4b4)
Te6edf3expected_digest Tff7b72= Te6edf3maTff7b72.Td2a8ffgroupTb4b4b4(T79c0ff2Tb4b4b4)
Tff7b72if Te6edf3expected_digestTb4b4b4:
Te6edf3expected_digestsTb4b4b4[Te6edf3algTb4b4b4] Tff7b72= Te6edf3expected_digest

Te6edf3ensure_dirTb4b4b4(Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffpackages_pathTb4b4b4, Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)Tb4b4b4)

Tff7b72with Te6edf3current_directoryTb4b4b4(Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffpackages_pathTb4b4b4, Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3filename Tff7b72= Te6edf3shprintTb4b4b4(Te6edf3shTff7b72.Td2a8ffbasenameTb4b4b4, Te6edf3urlTb4b4b4)Tff7b72.Td2a8ffstdoutTb4b4b4[Tb4b4b4:Tff7b72-T79c0ff1Tb4b4b4]Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff'Ta5d6ffutf-8Ta5d6ff'Tb4b4b4)

Te6edf3do_download Tff7b72= Tff7b72True
Te6edf3marker_filename Tff7b72= Ta5d6ff'Ta5d6ff.mark-Tffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3filenameTb4b4b4)
Tff7b72if Te6edf3existsTb4b4b4(Te6edf3filenameTb4b4b4) Tff7b72and Te6edf3isfileTb4b4b4(Te6edf3filenameTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3existsTb4b4b4(Te6edf3marker_filenameTb4b4b4)Tb4b4b4:
Te6edf3shprintTb4b4b4(Te6edf3shTff7b72.Td2a8ffrmTb4b4b4, Te6edf3filenameTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72for Te6edf3algTb4b4b4, Te6edf3expected_digest Tff7b72in Te6edf3expected_digestsTff7b72.Td2a8ffitemsTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3current_digest Tff7b72= Te6edf3algsumTb4b4b4(Te6edf3algTb4b4b4, Te6edf3filenameTb4b4b4)
Tff7b72if Te6edf3current_digest Tff7b72!= Te6edf3expected_digestTb4b4b4:
Te6edf3debugTb4b4b4(Ta5d6ff'Ta5d6ff* Generated Tffd700{}Ta5d6ffsum: Tffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3algTb4b4b4,
Te6edf3current_digestTb4b4b4)Tb4b4b4)
Te6edf3debugTb4b4b4(Ta5d6ff'Ta5d6ff* Expected Tffd700{}Ta5d6ffsum: Tffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3algTb4b4b4,
Te6edf3expected_digestTb4b4b4)Tb4b4b4)
Tff7b72raise Tf85149ValueErrorTb4b4b4(
Tb4b4b4(Ta5d6ff'Ta5d6ffGenerated Tffd700{0}Ta5d6ffsum does not match expected Tffd700{0}Ta5d6ffsum Ta5d6ff'
Ta5d6ff'Ta5d6fffor Tffd700{1}Ta5d6ff recipeTa5d6ff'Tb4b4b4)Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3algTb4b4b4, Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)Tb4b4b4)
Te6edf3do_download Tff7b72= Tff7b72False

T8b949e# If we got this far, we will download
Tff7b72if Te6edf3do_downloadTb4b4b4:
Te6edf3debugTb4b4b4(Ta5d6ff'Ta5d6ffDownloading Tffd700{}Ta5d6ff from Tffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4, Te6edf3urlTb4b4b4)Tb4b4b4)

Te6edf3shprintTb4b4b4(Te6edf3shTff7b72.Td2a8ffrmTb4b4b4, Ta5d6ff'Ta5d6ff-fTa5d6ff'Tb4b4b4, Te6edf3marker_filenameTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdownload_fileTb4b4b4(Tff7b72selfTff7b72.Td2a8ffversioned_urlTb4b4b4, Te6edf3filenameTb4b4b4)
Te6edf3touchTb4b4b4(Te6edf3marker_filenameTb4b4b4)

Tff7b72if Te6edf3existsTb4b4b4(Te6edf3filenameTb4b4b4) Tff7b72and Te6edf3isfileTb4b4b4(Te6edf3filenameTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3algTb4b4b4, Te6edf3expected_digest Tff7b72in Te6edf3expected_digestsTff7b72.Td2a8ffitemsTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3current_digest Tff7b72= Te6edf3algsumTb4b4b4(Te6edf3algTb4b4b4, Te6edf3filenameTb4b4b4)
Tff7b72if Te6edf3current_digest Tff7b72!= Te6edf3expected_digestTb4b4b4:
Te6edf3debugTb4b4b4(Ta5d6ff'Ta5d6ff* Generated Tffd700{}Ta5d6ffsum: Tffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3algTb4b4b4,
Te6edf3current_digestTb4b4b4)Tb4b4b4)
Te6edf3debugTb4b4b4(Ta5d6ff'Ta5d6ff* Expected Tffd700{}Ta5d6ffsum: Tffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3algTb4b4b4,
Te6edf3expected_digestTb4b4b4)Tb4b4b4)
Tff7b72raise Tf85149ValueErrorTb4b4b4(
Tb4b4b4(Ta5d6ff'Ta5d6ffGenerated Tffd700{0}Ta5d6ffsum does not match expected Tffd700{0}Ta5d6ffsum Ta5d6ff'
Ta5d6ff'Ta5d6fffor Tffd700{1}Ta5d6ff recipeTa5d6ff'Tb4b4b4)Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3algTb4b4b4, Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3infoTb4b4b4(Ta5d6ff'Tffd700{}Ta5d6ff download already cached, skippingTa5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)Tb4b4b4)

Tff7b72def Td2a8ffunpackTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Te6edf3info_mainTb4b4b4(Ta5d6ff'Ta5d6ffUnpacking Tffd700{}Ta5d6ff for Tffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4)

Te6edf3build_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_build_container_dirTb4b4b4(Te6edf3archTb4b4b4)

Te6edf3user_dir Tff7b72= Te6edf3environTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff'Ta5d6ffP4A_Tffd700{}Ta5d6ff_DIRTa5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnameTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3user_dir Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3infoTb4b4b4(Ta5d6ff'Ta5d6ffP4A_Tffd700{}Ta5d6ff_DIR exists, symlinking insteadTa5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffnameTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3existsTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72return
Te6edf3rmdirTb4b4b4(Te6edf3build_dirTb4b4b4)
Te6edf3ensure_dirTb4b4b4(Te6edf3build_dirTb4b4b4)
Te6edf3shprintTb4b4b4(Te6edf3shTff7b72.Td2a8ffcpTb4b4b4, Ta5d6ff'Ta5d6ff-aTa5d6ff'Tb4b4b4, Te6edf3user_dirTb4b4b4, Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTb4b4b4)Tb4b4b4)
Tff7b72return

Tff7b72if Tff7b72selfTff7b72.Td2a8ffurl Tff7b72is Tff7b72NoneTb4b4b4:
Te6edf3infoTb4b4b4(Ta5d6ff'Ta5d6ffSkipping Tffd700{}Ta5d6ff unpack as no URL is setTa5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)Tb4b4b4)
Tff7b72return

Te6edf3filename Tff7b72= Te6edf3shprintTb4b4b4(
Te6edf3shTff7b72.Td2a8ffbasenameTb4b4b4, Tff7b72selfTff7b72.Td2a8ffversioned_urlTb4b4b4)Tff7b72.Td2a8ffstdoutTb4b4b4[Tb4b4b4:Tff7b72-T79c0ff1Tb4b4b4]Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff'Ta5d6ffutf-8Ta5d6ff'Tb4b4b4)
Te6edf3ma Tff7b72= Te6edf3matchTb4b4b4(Ta5d6ffuTa5d6ff'Ta5d6ff^(.+)#[a-z0-9_]Ta5d6ff{Ta5d6ff3,}=([0-9a-f]Ta5d6ff{Ta5d6ff32,})$Ta5d6ff'Tb4b4b4, Te6edf3filenameTb4b4b4)
Tff7b72if Te6edf3maTb4b4b4: T8b949e# fragmented URL?
Te6edf3filename Tff7b72= Te6edf3maTff7b72.Td2a8ffgroupTb4b4b4(T79c0ff1Tb4b4b4)

Tff7b72with Te6edf3current_directoryTb4b4b4(Te6edf3build_dirTb4b4b4)Tb4b4b4:
Te6edf3directory_name Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTb4b4b4)

Tff7b72if Tff7b72not Te6edf3existsTb4b4b4(Te6edf3directory_nameTb4b4b4) Tff7b72or Tff7b72not Te6edf3isdirTb4b4b4(Te6edf3directory_nameTb4b4b4)Tb4b4b4:
Te6edf3extraction_filename Tff7b72= Te6edf3joinTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffpackages_pathTb4b4b4, Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4, Te6edf3filenameTb4b4b4)
Tff7b72if Te6edf3isfileTb4b4b4(Te6edf3extraction_filenameTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3extraction_filenameTff7b72.Td2a8ffendswithTb4b4b4(Tb4b4b4(Ta5d6ff'Ta5d6ff.zipTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff.whlTa5d6ff'Tb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3shTff7b72.Td2a8ffunzipTb4b4b4(Te6edf3extraction_filenameTb4b4b4)
Tff7b72except Tb4b4b4(Te6edf3shTff7b72.Td2a8ffErrorReturnCode_1Tb4b4b4, Te6edf3shTff7b72.Td2a8ffErrorReturnCode_2Tb4b4b4)Tb4b4b4:
T8b949e# return code 1 means unzipping had
T8b949e# warnings but did complete,
T8b949e# apparently happens sometimes with
T8b949e# github zips
Tff7b72pass
Te6edf3fileh Tff7b72= Te6edf3zipfileTff7b72.Td2a8ffZipFileTb4b4b4(Te6edf3extraction_filenameTb4b4b4, Ta5d6ff'Ta5d6ffrTa5d6ff'Tb4b4b4)
Te6edf3root_directory Tff7b72= Te6edf3filehTff7b72.Td2a8fffilelistTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8fffilenameTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff'Ta5d6ff/Ta5d6ff'Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72if Te6edf3root_directory Tff7b72!= Te6edf3basenameTb4b4b4(Te6edf3directory_nameTb4b4b4)Tb4b4b4:
Te6edf3moveTb4b4b4(Te6edf3root_directoryTb4b4b4, Te6edf3directory_nameTb4b4b4)
Tff7b72elif Te6edf3extraction_filenameTff7b72.Td2a8ffendswithTb4b4b4(
Tb4b4b4(Ta5d6ff'Ta5d6ff.tar.gzTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff.tgzTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff.tar.bz2Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff.tbz2Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff.tar.xzTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff.txzTa5d6ff'Tb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3shTff7b72.Td2a8fftarTb4b4b4(Ta5d6ff'Ta5d6ffxfTa5d6ff'Tb4b4b4, Te6edf3extraction_filenameTb4b4b4)
Te6edf3root_directory Tff7b72= Te6edf3shTff7b72.Td2a8fftarTb4b4b4(Ta5d6ff'Ta5d6fftfTa5d6ff'Tb4b4b4, Te6edf3extraction_filenameTb4b4b4)Tff7b72.Td2a8ffstdoutTff7b72.Td2a8ffdecodeTb4b4b4(
Ta5d6ff'Ta5d6ffutf-8Ta5d6ff'Tb4b4b4)Tff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff'Tffea00\nTa5d6ff'Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff'Ta5d6ff/Ta5d6ff'Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72if Te6edf3root_directory Tff7b72!= Te6edf3basenameTb4b4b4(Te6edf3directory_nameTb4b4b4)Tb4b4b4:
Te6edf3moveTb4b4b4(Te6edf3root_directoryTb4b4b4, Te6edf3directory_nameTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72raise Tf85149ExceptionTb4b4b4(
Ta5d6ff'Ta5d6ffCould not extract Tffd700{}Ta5d6ff download, it must be .zip, Ta5d6ff'
Ta5d6ff'Ta5d6ff.tar.gz or .tar.bz2 or .tar.xzTa5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3extraction_filenameTb4b4b4)Tb4b4b4)
Tff7b72elif Te6edf3isdirTb4b4b4(Te6edf3extraction_filenameTb4b4b4)Tb4b4b4:
Te6edf3ensure_dirTb4b4b4(Te6edf3directory_nameTb4b4b4)
Tff7b72for Te6edf3entry Tff7b72in Te6edf3listdirTb4b4b4(Te6edf3extraction_filenameTb4b4b4)Tb4b4b4:
T8b949e# Previously we filtered out the .git folder, but during the build process for some recipes
T8b949e# (e.g. when version is parsed by `setuptools_scm`) that may be needed.
Te6edf3shprintTb4b4b4(Te6edf3shTff7b72.Td2a8ffcpTb4b4b4, Ta5d6ff'Ta5d6ff-RvTa5d6ff'Tb4b4b4,
Te6edf3joinTb4b4b4(Te6edf3extraction_filenameTb4b4b4, Te6edf3entryTb4b4b4)Tb4b4b4,
Te6edf3directory_nameTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72raise Tf85149ExceptionTb4b4b4(
Ta5d6ff'Ta5d6ffGiven path is neither a file nor a directory: Tffd700{}Ta5d6ff'
Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3extraction_filenameTb4b4b4)Tb4b4b4)

Tff7b72elseTb4b4b4:
Te6edf3infoTb4b4b4(Ta5d6ff'Tffd700{}Ta5d6ff is already unpacked, skippingTa5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)Tb4b4b4)

Tff7b72def Td2a8ffget_recipe_envTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTff7b72=Tff7b72NoneTb4b4b4, Te6edf3with_flags_in_ccTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4:
T8b949e"""Return the env specialized for the recipe
"""
Tff7b72if Te6edf3arch Tff7b72is Tff7b72NoneTb4b4b4:
Te6edf3arch Tff7b72= Tff7b72selfTff7b72.Td2a8fffiltered_archsTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3env Tff7b72= Te6edf3archTff7b72.Td2a8ffget_envTb4b4b4(Te6edf3with_flags_in_ccTff7b72=Te6edf3with_flags_in_ccTb4b4b4)
Tff7b72return Te6edf3env

Tff7b72def Td2a8ffprebuild_archTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
T8b949e'''Run any pre-build tasks for the Recipe. By default, this checks if
any prebuild_archname methods exist for the archname of the current
architecture, and runs them if so.'''
Te6edf3prebuild Tff7b72= Ta5d6ff"Ta5d6ffprebuild_Tffd700{}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff'Ta5d6ff-Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff_Ta5d6ff'Tb4b4b4)Tb4b4b4)
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3prebuildTb4b4b4)Tb4b4b4:
Tffa657getattrTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3prebuildTb4b4b4)Tb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3infoTb4b4b4(Ta5d6ff'Tffd700{}Ta5d6ff has no Tffd700{}Ta5d6ff, skippingTa5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4, Te6edf3prebuildTb4b4b4)Tb4b4b4)

Tff7b72def Td2a8ffis_patchedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Te6edf3build_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)
Tff7b72return Te6edf3existsTb4b4b4(Te6edf3joinTb4b4b4(Te6edf3build_dirTb4b4b4, Ta5d6ff'Ta5d6ff.patchedTa5d6ff'Tb4b4b4)Tb4b4b4)

Tff7b72def Td2a8ffapply_patchesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4, Te6edf3build_dirTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
T8b949e'''Apply any patches for the Recipe.

.. versionchanged:: 0.6.0
Add ability to apply patches from any dir via kwarg `build_dir`'''
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpatchesTb4b4b4:
Te6edf3info_mainTb4b4b4(Ta5d6ff'Ta5d6ffApplying patches for Tffd700{}Ta5d6ff[Tffd700{}Ta5d6ff]Ta5d6ff'
Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4, Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)Tb4b4b4)

Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_patchedTb4b4b4(Te6edf3archTb4b4b4)Tb4b4b4:
Te6edf3info_mainTb4b4b4(Ta5d6ff'Tffd700{}Ta5d6ff already patched, skippingTa5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)Tb4b4b4)
Tff7b72return

Te6edf3build_dir Tff7b72= Te6edf3build_dir Tff7b72if Te6edf3build_dir Tff7b72else Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)
Tff7b72for Te6edf3patch Tff7b72in Tff7b72selfTff7b72.Td2a8ffpatchesTb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3patchTb4b4b4, Tb4b4b4(Tffa657tupleTb4b4b4, Tffa657listTb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3patchTb4b4b4, Te6edf3patch_check Tff7b72= Te6edf3patch
Tff7b72if Tff7b72not Te6edf3patch_checkTb4b4b4(Te6edf3archTff7b72=Te6edf3archTb4b4b4, Te6edf3recipeTff7b72=Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72continue

Tff7b72selfTff7b72.Td2a8ffapply_patchTb4b4b4(
Te6edf3patchTff7b72.Td2a8ffformatTb4b4b4(Te6edf3versionTff7b72=Tff7b72selfTff7b72.Td2a8ffversionTb4b4b4, Te6edf3archTff7b72=Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)Tb4b4b4,
Te6edf3archTff7b72.Td2a8ffarchTb4b4b4, Te6edf3build_dirTff7b72=Te6edf3build_dirTb4b4b4)

Te6edf3touchTb4b4b4(Te6edf3joinTb4b4b4(Te6edf3build_dirTb4b4b4, Ta5d6ff'Ta5d6ff.patchedTa5d6ff'Tb4b4b4)Tb4b4b4)

Tff7b72def Td2a8ffshould_buildTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
T8b949e'''Should perform any necessary test and return True only if it needs
building again. Per default we implement a library test, in case that
we detect so.

'''
Tff7b72if Tff7b72selfTff7b72.Td2a8ffbuilt_librariesTb4b4b4:
Tff7b72return Tff7b72not Tffa657allTb4b4b4(
Te6edf3existsTb4b4b4(Te6edf3libTb4b4b4) Tff7b72for Te6edf3lib Tff7b72in Tff7b72selfTff7b72.Td2a8ffget_librariesTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)
Tb4b4b4)
Tff7b72return Tff7b72True

Tff7b72def Td2a8ffbuild_archTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
T8b949e'''Run any build tasks for the Recipe. By default, this checks if
any build_archname methods exist for the archname of the current
architecture, and runs them if so.'''
Te6edf3build Tff7b72= Ta5d6ff"Ta5d6ffbuild_Tffd700{}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3buildTb4b4b4)Tb4b4b4:
Tffa657getattrTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3buildTb4b4b4)Tb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffinstall_librariesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
T8b949e'''This method is always called after `build_arch`. In case that we
detect a library recipe, defined by the class attribute
`built_libraries`, we will copy all defined libraries into the
right location.
'''
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffbuilt_librariesTb4b4b4:
Tff7b72return
Te6edf3shared_libs Tff7b72= Tb4b4b4[
Te6edf3lib Tff7b72for Te6edf3lib Tff7b72in Tff7b72selfTff7b72.Td2a8ffget_librariesTb4b4b4(Te6edf3archTb4b4b4) Tff7b72if Te6edf3libTff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Ta5d6ff.soTa5d6ff"Tb4b4b4)
Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffinstall_libsTb4b4b4(Te6edf3archTb4b4b4, Tff7b72*Te6edf3shared_libsTb4b4b4)

Tff7b72def Td2a8ffpostbuild_archTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
T8b949e'''Run any post-build tasks for the Recipe. By default, this checks if
any postbuild_archname methods exist for the archname of the
current architecture, and runs them if so.
'''
Te6edf3postbuild Tff7b72= Ta5d6ff"Ta5d6ffpostbuild_Tffd700{}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3postbuildTb4b4b4)Tb4b4b4:
Tffa657getattrTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3postbuildTb4b4b4)Tb4b4b4(Tb4b4b4)

Tff7b72if Tff7b72selfTff7b72.Td2a8ffneed_stl_sharedTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinstall_stl_libTb4b4b4(Te6edf3archTb4b4b4)

Tff7b72def Td2a8ffprepare_build_dirTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
T8b949e'''Copies the recipe data into a build dir for the given arch. By
default, this unpacks a downloaded recipe. You should override
it (or use a Recipe subclass with different behaviour) if you
want to do something else.
'''
Tff7b72selfTff7b72.Td2a8ffunpackTb4b4b4(Te6edf3archTb4b4b4)

Tff7b72def Td2a8ffclean_buildTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
T8b949e'''Deletes all the build information of the recipe.

If arch is not None, only this arch dir is deleted. Otherwise
(the default) all builds for all archs are deleted.

By default, this just deletes the main build dir. If the
recipe has e.g. object files biglinked, or .so files stored
elsewhere, you should override this method.

This method is intended for testing purposes, it may have
strange results. Rebuild everything if this seems to happen.

'''
Tff7b72if Te6edf3arch Tff7b72is Tff7b72NoneTb4b4b4:
Te6edf3base_dir Tff7b72= Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffbuild_dirTb4b4b4, Ta5d6ff'Ta5d6ffother_buildsTa5d6ff'Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3base_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_build_container_dirTb4b4b4(Te6edf3archTb4b4b4)
Te6edf3dirs Tff7b72= Te6edf3globTff7b72.Td2a8ffglobTb4b4b4(Te6edf3base_dir Tff7b72+ Ta5d6ff'Ta5d6ff-*Ta5d6ff'Tb4b4b4)
Tff7b72if Te6edf3existsTb4b4b4(Te6edf3base_dirTb4b4b4)Tb4b4b4:
Te6edf3dirsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3base_dirTb4b4b4)
Tff7b72if Tff7b72not Te6edf3dirsTb4b4b4:
Te6edf3warningTb4b4b4(Ta5d6ff'Ta5d6ffAttempted to clean build for Tffd700{}Ta5d6ff but found no existing Ta5d6ff'
Ta5d6ff'Ta5d6ffbuild dirsTa5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)Tb4b4b4)

Tff7b72for Te6edf3directory Tff7b72in Te6edf3dirsTb4b4b4:
Te6edf3rmdirTb4b4b4(Te6edf3directoryTb4b4b4)

T8b949e# Delete any Python distributions to ensure the recipe build
T8b949e# doesn't persist in site-packages
Te6edf3rmdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffpython_installs_dirTb4b4b4)

Tff7b72def Td2a8ffinstall_libsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4, Tff7b72*Te6edf3libsTb4b4b4)Tb4b4b4:
Te6edf3libs_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffget_libs_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)
Tff7b72if Tff7b72not Te6edf3libsTb4b4b4:
Te6edf3warningTb4b4b4(Ta5d6ff'Ta5d6ffinstall_libs called with no libraries to install!Ta5d6ff'Tb4b4b4)
Tff7b72return
Te6edf3args Tff7b72= Te6edf3libs Tff7b72+ Tb4b4b4(Te6edf3libs_dirTb4b4b4,Tb4b4b4)
Te6edf3shprintTb4b4b4(Te6edf3shTff7b72.Td2a8ffcpTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4)

Tff7b72def Td2a8ffhas_libsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4, Tff7b72*Te6edf3libsTb4b4b4)Tb4b4b4:
Tff7b72return Tffa657allTb4b4b4(Tffa657mapTb4b4b4(Tff7b72lambda Te6edf3libTb4b4b4: Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffhas_libTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4, Te6edf3libTb4b4b4)Tb4b4b4, Te6edf3libsTb4b4b4)Tb4b4b4)

Tff7b72def Td2a8ffget_librariesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3arch_nameTb4b4b4, Te6edf3in_contextTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
T8b949e"""Return the full path of the library depending on the architecture.
Per default, the build library path it will be returned, unless
`get_libraries` has been called with kwarg `in_context` set to
True.

.. note:: this method should be used for library recipes only
"""
Te6edf3recipe_libs Tff7b72= Tffa657setTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffbuilt_librariesTb4b4b4:
Tff7b72return Te6edf3recipe_libs
Tff7b72for Te6edf3libTb4b4b4, Te6edf3rel_path Tff7b72in Tff7b72selfTff7b72.Td2a8ffbuilt_librariesTff7b72.Td2a8ffitemsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3in_contextTb4b4b4:
Te6edf3abs_path Tff7b72= Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3arch_nameTb4b4b4)Tb4b4b4, Te6edf3rel_pathTb4b4b4, Te6edf3libTb4b4b4)
Tff7b72if Te6edf3rel_path Tff7b72in Tb4b4b4{Ta5d6ff"Ta5d6ff.Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4}Tb4b4b4:
Te6edf3abs_path Tff7b72= Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3arch_nameTb4b4b4)Tb4b4b4, Te6edf3libTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3abs_path Tff7b72= Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffget_libs_dirTb4b4b4(Te6edf3arch_nameTb4b4b4)Tb4b4b4, Te6edf3libTb4b4b4)
Te6edf3recipe_libsTff7b72.Td2a8ffaddTb4b4b4(Te6edf3abs_pathTb4b4b4)
Tff7b72return Te6edf3recipe_libs

Tf0883e@classmethod
Tff7b72def Td2a8ffrecipe_dirsTb4b4b4(Tff7b72clsTb4b4b4, Te6edf3ctxTb4b4b4)Tb4b4b4:
Te6edf3recipe_dirs Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72if Te6edf3ctxTff7b72.Td2a8fflocal_recipes Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3recipe_dirsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3realpathTb4b4b4(Te6edf3ctxTff7b72.Td2a8fflocal_recipesTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3ctxTff7b72.Td2a8ffstorage_dirTb4b4b4:
Te6edf3recipe_dirsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3joinTb4b4b4(Te6edf3ctxTff7b72.Td2a8ffstorage_dirTb4b4b4, Ta5d6ff'Ta5d6ffrecipesTa5d6ff'Tb4b4b4)Tb4b4b4)
Te6edf3recipe_dirsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3joinTb4b4b4(Te6edf3ctxTff7b72.Td2a8ffroot_dirTb4b4b4, Ta5d6ff"Ta5d6ffrecipesTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72return Te6edf3recipe_dirs

Tf0883e@classmethod
Tff7b72def Td2a8fflist_recipesTb4b4b4(Tff7b72clsTb4b4b4, Te6edf3ctxTb4b4b4)Tb4b4b4:
Te6edf3forbidden_dirs Tff7b72= Tb4b4b4(Ta5d6ff'Ta5d6ff__pycache__Ta5d6ff'Tb4b4b4, Tb4b4b4)
Tff7b72for Te6edf3recipes_dir Tff7b72in Tff7b72clsTff7b72.Td2a8ffrecipe_dirsTb4b4b4(Te6edf3ctxTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3recipes_dir Tff7b72and Te6edf3existsTb4b4b4(Te6edf3recipes_dirTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3name Tff7b72in Te6edf3listdirTb4b4b4(Te6edf3recipes_dirTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3name Tff7b72in Te6edf3forbidden_dirsTb4b4b4:
Tff7b72continue
Te6edf3fn Tff7b72= Te6edf3joinTb4b4b4(Te6edf3recipes_dirTb4b4b4, Te6edf3nameTb4b4b4)
Tff7b72if Te6edf3isdirTb4b4b4(Te6edf3fnTb4b4b4)Tb4b4b4:
Tff7b72yield Te6edf3name

Tf0883e@classmethod
Tff7b72def Td2a8ffget_recipeTb4b4b4(Tff7b72clsTb4b4b4, Te6edf3nameTb4b4b4, Te6edf3ctxTb4b4b4)Tb4b4b4:
T8b949e'''Returns the Recipe with the given name, if it exists.'''
Te6edf3name Tff7b72= Te6edf3nameTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Tffa657hasattrTb4b4b4(Tff7b72clsTb4b4b4, Ta5d6ff"Ta5d6ffrecipesTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72clsTff7b72.Td2a8ffrecipes Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72if Te6edf3name Tff7b72in Tff7b72clsTff7b72.Td2a8ffrecipesTb4b4b4:
Tff7b72return Tff7b72clsTff7b72.Td2a8ffrecipesTb4b4b4[Te6edf3nameTb4b4b4]

Te6edf3recipe_file Tff7b72= Tff7b72None
Tff7b72for Te6edf3recipes_dir Tff7b72in Tff7b72clsTff7b72.Td2a8ffrecipe_dirsTb4b4b4(Te6edf3ctxTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3existsTb4b4b4(Te6edf3recipes_dirTb4b4b4)Tb4b4b4:
Tff7b72continue
T8b949e# Find matching folder (may differ in case):
Tff7b72for Te6edf3subfolder Tff7b72in Te6edf3listdirTb4b4b4(Te6edf3recipes_dirTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3subfolderTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4) Tff7b72== Te6edf3nameTb4b4b4:
Te6edf3recipe_file Tff7b72= Te6edf3joinTb4b4b4(Te6edf3recipes_dirTb4b4b4, Te6edf3subfolderTb4b4b4, Ta5d6ff'Ta5d6ff__init__.pyTa5d6ff'Tb4b4b4)
Tff7b72if Te6edf3existsTb4b4b4(Te6edf3recipe_fileTb4b4b4)Tb4b4b4:
Te6edf3name Tff7b72= Te6edf3subfolder T8b949e# adapt to actual spelling
Tff7b72break
Te6edf3recipe_file Tff7b72= Tff7b72None
Tff7b72if Te6edf3recipe_file Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72break

Tff7b72elseTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff'Ta5d6ffRecipe does not exist: Tffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3nameTb4b4b4)Tb4b4b4)

Te6edf3mod Tff7b72= Te6edf3import_recipeTb4b4b4(Ta5d6ff'Ta5d6ffpythonforandroid.recipes.Tffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3nameTb4b4b4)Tb4b4b4, Te6edf3recipe_fileTb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3loggerTff7b72.Td2a8ffhandlersTb4b4b4) Tff7b72> T79c0ff1Tb4b4b4:
Te6edf3loggerTff7b72.Td2a8ffremoveHandlerTb4b4b4(Te6edf3loggerTff7b72.Td2a8ffhandlersTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)
Te6edf3recipe Tff7b72= Te6edf3modTff7b72.Td2a8ffrecipe
Te6edf3recipeTff7b72.Td2a8ffctx Tff7b72= Te6edf3ctx
Tff7b72clsTff7b72.Td2a8ffrecipesTb4b4b4[Te6edf3nameTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tb4b4b4] Tff7b72= Te6edf3recipe
Tff7b72return Te6edf3recipe


Tff7b72class T56d364IncludedFilesBehaviourTb4b4b4(Tffa657objectTb4b4b4)Tb4b4b4:
T8b949e'''Recipe mixin class that will automatically unpack files included in
the recipe directory.'''
Te6edf3src_filename Tff7b72= Tff7b72None

Tff7b72def Td2a8ffprepare_build_dirTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsrc_filename Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72raise Te6edf3BuildInterruptingExceptionTb4b4b4(
Ta5d6ff'Ta5d6ffIncludedFilesBehaviour failed: no src_filename specifiedTa5d6ff'Tb4b4b4)
Te6edf3rmdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTb4b4b4)Tb4b4b4)
Te6edf3shprintTb4b4b4(Te6edf3shTff7b72.Td2a8ffcpTb4b4b4, Ta5d6ff'Ta5d6ff-aTa5d6ff'Tb4b4b4, Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_recipe_dirTb4b4b4(Tb4b4b4)Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffsrc_filenameTb4b4b4)Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTb4b4b4)Tb4b4b4)


Tff7b72class T56d364BootstrapNDKRecipeTb4b4b4(Te6edf3RecipeTb4b4b4)Tb4b4b4:
T8b949e'''A recipe class for recipes built in an Android project jni dir with
an Android.mk. These are not cached separatly, but built in the
bootstrap's own building directory.

To build an NDK project which is not part of the bootstrap, see
:class:`~pythonforandroid.recipe.NDKRecipe`.

To link with python, call the method :meth:`get_recipe_env`
with the kwarg *with_python=True*.
'''

Te6edf3dir_name Tff7b72= Tff7b72None T8b949e# The name of the recipe build folder in the jni dir

Tff7b72def Td2a8ffget_build_container_dirTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffget_jni_dirTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffget_build_dirTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffdir_name Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff'Tffd700{}Ta5d6ff recipe doesnTffea00\'Ta5d6fft define a dir_name, but Ta5d6ff'
Ta5d6ff'Ta5d6ffthis is necessaryTa5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)Tb4b4b4)
Tff7b72return Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_build_container_dirTb4b4b4(Te6edf3archTb4b4b4)Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffdir_nameTb4b4b4)

Tff7b72def Td2a8ffget_jni_dirTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffbootstrapTff7b72.Td2a8ffbuild_dirTb4b4b4, Ta5d6ff'Ta5d6ffjniTa5d6ff'Tb4b4b4)

Tff7b72def Td2a8ffget_recipe_envTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTff7b72=Tff7b72NoneTb4b4b4, Te6edf3with_flags_in_ccTff7b72=Tff7b72TrueTb4b4b4, Te6edf3with_pythonTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3env Tff7b72= Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffget_recipe_envTb4b4b4(Te6edf3archTb4b4b4, Te6edf3with_flags_in_ccTb4b4b4)
Tff7b72if Tff7b72not Te6edf3with_pythonTb4b4b4:
Tff7b72return Te6edf3env

Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffPYTHON_INCLUDE_ROOTTa5d6ff'Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffpython_recipeTff7b72.Td2a8ffinclude_rootTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffPYTHON_LINK_ROOTTa5d6ff'Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffpython_recipeTff7b72.Td2a8fflink_rootTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffEXTRA_LDLIBSTa5d6ff'Tb4b4b4] Tff7b72= Ta5d6ff'Ta5d6ff -lpythonTffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffpython_recipeTff7b72.Td2a8fflink_versionTb4b4b4)
Tff7b72return Te6edf3env


Tff7b72class T56d364NDKRecipeTb4b4b4(Te6edf3RecipeTb4b4b4)Tb4b4b4:
T8b949e'''A recipe class for any NDK project not included in the bootstrap.'''

Te6edf3generated_libraries Tff7b72= Tb4b4b4[Tb4b4b4]

Tff7b72def Td2a8ffshould_buildTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Te6edf3lib_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_lib_dirTb4b4b4(Te6edf3archTb4b4b4)

Tff7b72for Te6edf3lib Tff7b72in Tff7b72selfTff7b72.Td2a8ffgenerated_librariesTb4b4b4:
Tff7b72if Tff7b72not Te6edf3existsTb4b4b4(Te6edf3joinTb4b4b4(Te6edf3lib_dirTb4b4b4, Te6edf3libTb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72True

Tff7b72return Tff7b72False

Tff7b72def Td2a8ffget_lib_dirTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)Tb4b4b4, Ta5d6ff'Ta5d6ffobjTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6fflocalTa5d6ff'Tb4b4b4, Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)

Tff7b72def Td2a8ffget_jni_dirTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)Tb4b4b4, Ta5d6ff'Ta5d6ffjniTa5d6ff'Tb4b4b4)

Tff7b72def Td2a8ffbuild_archTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4, Tff7b72*Te6edf3extra_argsTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffbuild_archTb4b4b4(Te6edf3archTb4b4b4)

Te6edf3env Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_recipe_envTb4b4b4(Te6edf3archTb4b4b4)
Tff7b72with Te6edf3current_directoryTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3shprintTb4b4b4(
Te6edf3shTff7b72.Td2a8ffCommandTb4b4b4(Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffndk_dirTb4b4b4, Ta5d6ff"Ta5d6ffndk-buildTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Ta5d6ff'Ta5d6ffV=1Ta5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6ffNDK_DEBUG=Ta5d6ff' Tff7b72+ Tb4b4b4(Ta5d6ff"Ta5d6ff1Ta5d6ff" Tff7b72if Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffbuild_as_debuggable Tff7b72else Ta5d6ff"Ta5d6ff0Ta5d6ff"Tb4b4b4)Tb4b4b4,
Ta5d6ff'Ta5d6ffAPP_PLATFORM=android-Ta5d6ff' Tff7b72+ Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffndk_apiTb4b4b4)Tb4b4b4,
Ta5d6ff'Ta5d6ffAPP_ABI=Ta5d6ff' Tff7b72+ Te6edf3archTff7b72.Td2a8ffarchTb4b4b4,
Tff7b72*Te6edf3extra_argsTb4b4b4, Te6edf3_envTff7b72=Te6edf3env
Tb4b4b4)


Tff7b72class T56d364PythonRecipeTb4b4b4(Te6edf3RecipeTb4b4b4)Tb4b4b4:
Te6edf3site_packages_name Tff7b72= Tff7b72None
T8b949e'''The name of the module's folder when installed in the Python
site-packages (e.g. for pyjnius it is 'jnius')'''

Te6edf3call_hostpython_via_targetpython Tff7b72= Tff7b72True
T8b949e'''If True, tries to install the module using the hostpython binary
copied to the target (normally arm) python build dir. However, this
will fail if the module tries to import e.g. _io.so. Set this to False
to call hostpython from its own build dir, installing the module in
the right place via arguments to setup.py. However, this may not set
the environment correctly and so False is not the default.'''

Te6edf3install_in_hostpython Tff7b72= Tff7b72False
T8b949e'''If True, additionally installs the module in the hostpython build
dir. This will make it available to other recipes if
call_hostpython_via_targetpython is False.
'''

Te6edf3install_in_targetpython Tff7b72= Tff7b72True
T8b949e'''If True, installs the module in the targetpython installation dir.
This is almost always what you want to do.'''

Te6edf3setup_extra_args Tff7b72= Tb4b4b4[Tb4b4b4]
T8b949e'''List of extra arguments to pass to setup.py'''

Te6edf3depends Tff7b72= Tb4b4b4[Ta5d6ff'Ta5d6ffpython3Ta5d6ff'Tb4b4b4]
T8b949e'''
.. note:: it's important to keep this depends as a class attribute outside
`__init__` because sometimes we only initialize the class, so the
`__init__` call won't be called and the deps would be missing
(which breaks the dependency graph computation)

.. warning:: don't forget to call `super().__init__()` in any recipe's
`__init__`, or otherwise it may not be ensured that it depends
on python2 or python3 which can break the dependency graph
'''

Te6edf3hostpython_prerequisites Tff7b72= Tb4b4b4[Tb4b4b4]
T8b949e'''List of hostpython packages required to build a recipe'''

Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72*Te6edf3argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tff7b72if Ta5d6ff'Ta5d6ffpython3Ta5d6ff' Tff7b72not Tff7b72in Tff7b72selfTff7b72.Td2a8ffdependsTb4b4b4:
T8b949e# We ensure here that the recipe depends on python even it overrode
T8b949e# `depends`. We only do this if it doesn't already depend on any
T8b949e# python, since some recipes intentionally don't depend on/work
T8b949e# with all python variants
Te6edf3depends Tff7b72= Tff7b72selfTff7b72.Td2a8ffdepends
Te6edf3dependsTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff'Ta5d6ffpython3Ta5d6ff'Tb4b4b4)
Te6edf3depends Tff7b72= Tffa657listTb4b4b4(Tffa657setTb4b4b4(Te6edf3dependsTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdepends Tff7b72= Te6edf3depends

Tff7b72def Td2a8ffclean_buildTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffclean_buildTb4b4b4(Te6edf3archTff7b72=Te6edf3archTb4b4b4)
Te6edf3name Tff7b72= Tff7b72selfTff7b72.Td2a8fffolder_name
Te6edf3python_install_dirs Tff7b72= Te6edf3globTff7b72.Td2a8ffglobTb4b4b4(Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffpython_installs_dirTb4b4b4, Ta5d6ff'Ta5d6ff*Ta5d6ff'Tb4b4b4)Tb4b4b4)
Tff7b72for Te6edf3python_install Tff7b72in Te6edf3python_install_dirsTb4b4b4:
Te6edf3site_packages_dir Tff7b72= Te6edf3globTff7b72.Td2a8ffglobTb4b4b4(Te6edf3joinTb4b4b4(Te6edf3python_installTb4b4b4, Ta5d6ff'Ta5d6fflibTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffpython*Ta5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6ffsite-packagesTa5d6ff'Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3site_packages_dirTb4b4b4:
Te6edf3build_dir Tff7b72= Te6edf3joinTb4b4b4(Te6edf3site_packages_dirTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3nameTb4b4b4)
Tff7b72if Te6edf3existsTb4b4b4(Te6edf3build_dirTb4b4b4)Tb4b4b4:
Te6edf3infoTb4b4b4(Ta5d6ff'Ta5d6ffDeleted Tffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3build_dirTb4b4b4)Tb4b4b4)
Te6edf3rmdirTb4b4b4(Te6edf3build_dirTb4b4b4)

Tf0883e@property
Tff7b72def Td2a8ffreal_hostpython_locationTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3host_name Tff7b72= Ta5d6ff'Ta5d6ffhostTffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffpython_recipeTff7b72.Td2a8ffnameTb4b4b4)
Tff7b72if Te6edf3host_name Tff7b72== Ta5d6ff'Ta5d6ffhostpython3Ta5d6ff'Tb4b4b4:
Te6edf3python_recipe Tff7b72= Te6edf3RecipeTff7b72.Td2a8ffget_recipeTb4b4b4(Te6edf3host_nameTb4b4b4, Tff7b72selfTff7b72.Td2a8ffctxTb4b4b4)
Tff7b72return Te6edf3python_recipeTff7b72.Td2a8ffpython_exe
Tff7b72elseTb4b4b4:
Te6edf3python_recipe Tff7b72= Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffpython_recipe
Tff7b72return Ta5d6ff'Ta5d6ffpythonTffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3python_recipeTff7b72.Td2a8ffversionTb4b4b4)

Tf0883e@property
Tff7b72def Td2a8ffhostpython_locationTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffcall_hostpython_via_targetpythonTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffreal_hostpython_location
Tff7b72return Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffhostpython

Tf0883e@property
Tff7b72def Td2a8fffolder_nameTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e'''The name of the build folders containing this recipe.'''
Te6edf3name Tff7b72= Tff7b72selfTff7b72.Td2a8ffsite_packages_name
Tff7b72if Te6edf3name Tff7b72is Tff7b72NoneTb4b4b4:
Te6edf3name Tff7b72= Tff7b72selfTff7b72.Td2a8ffname
Tff7b72return Te6edf3name

Tff7b72def Td2a8ffget_recipe_envTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTff7b72=Tff7b72NoneTb4b4b4, Te6edf3with_flags_in_ccTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4:
Te6edf3env Tff7b72= Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffget_recipe_envTb4b4b4(Te6edf3archTb4b4b4, Te6edf3with_flags_in_ccTb4b4b4)
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffPYTHONNOUSERSITETa5d6ff'Tb4b4b4] Tff7b72= Ta5d6ff'Ta5d6ff1Ta5d6ff'
T8b949e# Set the LANG, this isn't usually important but is a better default
T8b949e# as it occasionally matters how Python e.g. reads files
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffLANGTa5d6ff'Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffen_GB.UTF-8Ta5d6ff"
T8b949e# Binaries made by packages installed by pip
Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6ffPATHTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhostpython_site_dirTb4b4b4, Ta5d6ff"Ta5d6ffbinTa5d6ff"Tb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff:Ta5d6ff" Tff7b72+ Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6ffPATHTa5d6ff"Tb4b4b4]

Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffcall_hostpython_via_targetpythonTb4b4b4:
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffCFLAGSTa5d6ff'Tb4b4b4] Tff7b72+Tff7b72= Ta5d6ff'Ta5d6ff -ITffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffpython_recipeTff7b72.Td2a8ffinclude_rootTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)
Tb4b4b4)
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffLDFLAGSTa5d6ff'Tb4b4b4] Tff7b72+Tff7b72= Ta5d6ff'Ta5d6ff -LTffd700{}Ta5d6ff -lpythonTffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffpython_recipeTff7b72.Td2a8fflink_rootTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffpython_recipeTff7b72.Td2a8fflink_versionTb4b4b4,
Tb4b4b4)

Te6edf3hppath Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3hppathTff7b72.Td2a8ffappendTb4b4b4(Te6edf3joinTb4b4b4(Te6edf3dirnameTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhostpython_locationTb4b4b4)Tb4b4b4, Ta5d6ff'Ta5d6ffLibTa5d6ff'Tb4b4b4)Tb4b4b4)
Te6edf3hppathTff7b72.Td2a8ffappendTb4b4b4(Te6edf3joinTb4b4b4(Te6edf3hppathTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Ta5d6ff'Ta5d6ffsite-packagesTa5d6ff'Tb4b4b4)Tb4b4b4)
Te6edf3builddir Tff7b72= Te6edf3joinTb4b4b4(Te6edf3dirnameTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhostpython_locationTb4b4b4)Tb4b4b4, Ta5d6ff'Ta5d6ffbuildTa5d6ff'Tb4b4b4)
Tff7b72if Te6edf3existsTb4b4b4(Te6edf3builddirTb4b4b4)Tb4b4b4:
Te6edf3hppath Tff7b72+Tff7b72= Tb4b4b4[Te6edf3joinTb4b4b4(Te6edf3builddirTb4b4b4, Te6edf3dTb4b4b4) Tff7b72for Te6edf3d Tff7b72in Te6edf3listdirTb4b4b4(Te6edf3builddirTb4b4b4)
Tff7b72if Te6edf3isdirTb4b4b4(Te6edf3joinTb4b4b4(Te6edf3builddirTb4b4b4, Te6edf3dTb4b4b4)Tb4b4b4)Tb4b4b4]
Tff7b72if Tffa657lenTb4b4b4(Te6edf3hppathTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Tff7b72if Ta5d6ff'Ta5d6ffPYTHONPATHTa5d6ff' Tff7b72in Te6edf3envTb4b4b4:
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffPYTHONPATHTa5d6ff'Tb4b4b4] Tff7b72= Ta5d6ff'Ta5d6ff:Ta5d6ff'Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3hppath Tff7b72+ Tb4b4b4[Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffPYTHONPATHTa5d6ff'Tb4b4b4]Tb4b4b4]Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffPYTHONPATHTa5d6ff'Tb4b4b4] Tff7b72= Ta5d6ff'Ta5d6ff:Ta5d6ff'Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3hppathTb4b4b4)
Tff7b72return Te6edf3env

Tff7b72def Td2a8ffshould_buildTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Te6edf3name Tff7b72= Tff7b72selfTff7b72.Td2a8fffolder_name
Tff7b72if Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffhas_packageTb4b4b4(Te6edf3nameTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Te6edf3infoTb4b4b4(Ta5d6ff'Ta5d6ffPython package already exists in site-packagesTa5d6ff'Tb4b4b4)
Tff7b72return Tff7b72False
Te6edf3infoTb4b4b4(Ta5d6ff'Tffd700{}Ta5d6ff apparently isnTffea00\'Ta5d6fft already in site-packagesTa5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3nameTb4b4b4)Tb4b4b4)
Tff7b72return Tff7b72True

Tff7b72def Td2a8ffbuild_archTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
T8b949e'''Install the Python module by calling setup.py install with
the target Python dir.'''
Tff7b72selfTff7b72.Td2a8ffinstall_hostpython_prerequisitesTb4b4b4(Tb4b4b4)
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffbuild_archTb4b4b4(Te6edf3archTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinstall_python_packageTb4b4b4(Te6edf3archTb4b4b4)

Tff7b72def Td2a8ffinstall_python_packageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4, Te6edf3nameTff7b72=Tff7b72NoneTb4b4b4, Te6edf3envTff7b72=Tff7b72NoneTb4b4b4, Te6edf3is_dirTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4:
T8b949e'''Automate the installation of a Python package (or a cython
package where the cython components are pre-built).'''
T8b949e# arch = self.filtered_archs[0] # old kivy-ios way
Tff7b72if Te6edf3name Tff7b72is Tff7b72NoneTb4b4b4:
Te6edf3name Tff7b72= Tff7b72selfTff7b72.Td2a8ffname
Tff7b72if Te6edf3env Tff7b72is Tff7b72NoneTb4b4b4:
Te6edf3env Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_recipe_envTb4b4b4(Te6edf3archTb4b4b4)

Te6edf3infoTb4b4b4(Ta5d6ff'Ta5d6ffInstalling Tffd700{}Ta5d6ff into site-packagesTa5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)Tb4b4b4)

Te6edf3hostpython Tff7b72= Te6edf3shTff7b72.Td2a8ffCommandTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhostpython_locationTb4b4b4)
Te6edf3hpenv Tff7b72= Te6edf3envTff7b72.Td2a8ffcopyTb4b4b4(Tb4b4b4)
Tff7b72with Te6edf3current_directoryTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3shprintTb4b4b4(Te6edf3hostpythonTb4b4b4, Ta5d6ff'Ta5d6ffsetup.pyTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffinstallTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff-O2Ta5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6ff--root=Tffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffget_python_install_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)Tb4b4b4)Tb4b4b4,
Ta5d6ff'Ta5d6ff--install-lib=.Ta5d6ff'Tb4b4b4,
Te6edf3_envTff7b72=Te6edf3hpenvTb4b4b4, Tff7b72*Tff7b72selfTff7b72.Td2a8ffsetup_extra_argsTb4b4b4)

T8b949e# If asked, also install in the hostpython build dir
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinstall_in_hostpythonTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinstall_hostpython_packageTb4b4b4(Te6edf3archTb4b4b4)

Tff7b72def Td2a8ffget_hostrecipe_envTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Te6edf3env Tff7b72= Te6edf3environTff7b72.Td2a8ffcopyTb4b4b4(Tb4b4b4)
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffPYTHONPATHTa5d6ff'Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffhostpython_site_dir
Tff7b72return Te6edf3env

Tf0883e@property
Tff7b72def Td2a8ffhostpython_site_dirTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3joinTb4b4b4(Te6edf3dirnameTb4b4b4(Tff7b72selfTff7b72.Td2a8ffreal_hostpython_locationTb4b4b4)Tb4b4b4, Ta5d6ff'Ta5d6ffLibTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffsite-packagesTa5d6ff'Tb4b4b4)

Tff7b72def Td2a8ffinstall_hostpython_packageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Te6edf3env Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_hostrecipe_envTb4b4b4(Te6edf3archTb4b4b4)
Te6edf3real_hostpython Tff7b72= Te6edf3shTff7b72.Td2a8ffCommandTb4b4b4(Tff7b72selfTff7b72.Td2a8ffreal_hostpython_locationTb4b4b4)
Te6edf3shprintTb4b4b4(Te6edf3real_hostpythonTb4b4b4, Ta5d6ff'Ta5d6ffsetup.pyTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffinstallTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff-O2Ta5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6ff--root=Tffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3dirnameTb4b4b4(Tff7b72selfTff7b72.Td2a8ffreal_hostpython_locationTb4b4b4)Tb4b4b4)Tb4b4b4,
Ta5d6ff'Ta5d6ff--install-lib=Lib/site-packagesTa5d6ff'Tb4b4b4,
Te6edf3_envTff7b72=Te6edf3envTb4b4b4, Tff7b72*Tff7b72selfTff7b72.Td2a8ffsetup_extra_argsTb4b4b4)

Tf0883e@property
Tff7b72def Td2a8ffpython_major_minor_versionTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3parsed_version Tff7b72= Te6edf3packagingTff7b72.Td2a8ffversionTff7b72.Td2a8ffparseTb4b4b4(Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffpython_recipeTff7b72.Td2a8ffversionTb4b4b4)
Tff7b72return Ta5d6fffTa5d6ff"Tffd700{Te6edf3parsed_versionTff7b72.Td2a8ffmajorTffd700}Ta5d6ff.Tffd700{Te6edf3parsed_versionTff7b72.Td2a8ffminorTffd700}Ta5d6ff"

Tff7b72def Td2a8ffinstall_hostpython_prerequisitesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3packagesTff7b72=Tff7b72NoneTb4b4b4, Te6edf3force_upgradeTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3packagesTb4b4b4:
Te6edf3packages Tff7b72= Tff7b72selfTff7b72.Td2a8ffhostpython_prerequisites

Tff7b72if Tffa657lenTb4b4b4(Te6edf3packagesTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4:
Tff7b72return

Te6edf3pip_options Tff7b72= Tb4b4b4[
Ta5d6ff"Ta5d6ffinstallTa5d6ff"Tb4b4b4,
Tff7b72*Te6edf3packagesTb4b4b4,
Ta5d6ff"Ta5d6ff--targetTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffhostpython_site_dirTb4b4b4, Ta5d6ff"Ta5d6ff--python-versionTa5d6ff"Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffpython_recipeTff7b72.Td2a8ffversionTb4b4b4,
T8b949e# Don't use sources, instead wheels
Ta5d6ff"Ta5d6ff--only-binary=:all:Ta5d6ff"Tb4b4b4,
Tb4b4b4]
Tff7b72if Te6edf3force_upgradeTb4b4b4:
Te6edf3pip_optionsTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff"Ta5d6ff--upgradeTa5d6ff"Tb4b4b4)
T8b949e# Use system's pip
Te6edf3shprintTb4b4b4(Te6edf3shTff7b72.Td2a8ffpipTb4b4b4, Tff7b72*Te6edf3pip_optionsTb4b4b4)

Tff7b72def Td2a8ffrestore_hostpython_prerequisitesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3packagesTb4b4b4)Tb4b4b4:
Te6edf3_packages Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3package Tff7b72in Te6edf3packagesTb4b4b4:
Te6edf3original_version Tff7b72= Te6edf3RecipeTff7b72.Td2a8ffget_recipeTb4b4b4(Te6edf3packageTb4b4b4, Tff7b72selfTff7b72.Td2a8ffctxTb4b4b4)Tff7b72.Td2a8ffversion
Te6edf3_packagesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3package Tff7b72+ Ta5d6ff"Ta5d6ff==Ta5d6ff" Tff7b72+ Te6edf3original_versionTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinstall_hostpython_prerequisitesTb4b4b4(Te6edf3packagesTff7b72=Te6edf3_packagesTb4b4b4)


Tff7b72class T56d364CompiledComponentsPythonRecipeTb4b4b4(Te6edf3PythonRecipeTb4b4b4)Tb4b4b4:
Te6edf3pre_build_ext Tff7b72= Tff7b72False

Te6edf3build_cmd Tff7b72= Ta5d6ff'Ta5d6ffbuild_extTa5d6ff'

Tff7b72def Td2a8ffbuild_archTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
T8b949e'''Build any cython components, then install the Python module by
calling setup.py install with the target Python dir.
'''
Te6edf3RecipeTff7b72.Td2a8ffbuild_archTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinstall_hostpython_prerequisitesTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbuild_compiled_componentsTb4b4b4(Te6edf3archTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinstall_python_packageTb4b4b4(Te6edf3archTb4b4b4)

Tff7b72def Td2a8ffbuild_compiled_componentsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Te6edf3infoTb4b4b4(Ta5d6ff'Ta5d6ffBuilding compiled components in Tffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)Tb4b4b4)

Te6edf3env Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_recipe_envTb4b4b4(Te6edf3archTb4b4b4)
Te6edf3hostpython Tff7b72= Te6edf3shTff7b72.Td2a8ffCommandTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhostpython_locationTb4b4b4)
Tff7b72with Te6edf3current_directoryTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinstall_in_hostpythonTb4b4b4:
Te6edf3shprintTb4b4b4(Te6edf3hostpythonTb4b4b4, Ta5d6ff'Ta5d6ffsetup.pyTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffcleanTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff--allTa5d6ff'Tb4b4b4, Te6edf3_envTff7b72=Te6edf3envTb4b4b4)
Te6edf3shprintTb4b4b4(Te6edf3hostpythonTb4b4b4, Ta5d6ff'Ta5d6ffsetup.pyTa5d6ff'Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffbuild_cmdTb4b4b4, Ta5d6ff'Ta5d6ff-vTa5d6ff'Tb4b4b4,
Te6edf3_envTff7b72=Te6edf3envTb4b4b4, Tff7b72*Tff7b72selfTff7b72.Td2a8ffsetup_extra_argsTb4b4b4)
Te6edf3build_dir Tff7b72= Te6edf3globTff7b72.Td2a8ffglobTb4b4b4(Ta5d6ff'Ta5d6ffbuild/lib.*Ta5d6ff'Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3shprintTb4b4b4(Te6edf3shTff7b72.Td2a8fffindTb4b4b4, Te6edf3build_dirTb4b4b4, Ta5d6ff'Ta5d6ff-nameTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff"Ta5d6ff*.oTa5d6ff"Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff-execTa5d6ff'Tb4b4b4,
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffSTRIPTa5d6ff'Tb4b4b4]Tb4b4b4, Ta5d6ff'Tffd700{}Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff;Ta5d6ff'Tb4b4b4, Te6edf3_envTff7b72=Te6edf3envTb4b4b4)

Tff7b72def Td2a8ffinstall_hostpython_packageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Te6edf3env Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_hostrecipe_envTb4b4b4(Te6edf3archTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrebuild_compiled_componentsTb4b4b4(Te6edf3archTb4b4b4, Te6edf3envTb4b4b4)
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffinstall_hostpython_packageTb4b4b4(Te6edf3archTb4b4b4)

Tff7b72def Td2a8ffrebuild_compiled_componentsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4, Te6edf3envTb4b4b4)Tb4b4b4:
Te6edf3infoTb4b4b4(Ta5d6ff'Ta5d6ffRebuilding compiled components in Tffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)Tb4b4b4)

Te6edf3hostpython Tff7b72= Te6edf3shTff7b72.Td2a8ffCommandTb4b4b4(Tff7b72selfTff7b72.Td2a8ffreal_hostpython_locationTb4b4b4)
Te6edf3shprintTb4b4b4(Te6edf3hostpythonTb4b4b4, Ta5d6ff'Ta5d6ffsetup.pyTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffcleanTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff--allTa5d6ff'Tb4b4b4, Te6edf3_envTff7b72=Te6edf3envTb4b4b4)
Te6edf3shprintTb4b4b4(Te6edf3hostpythonTb4b4b4, Ta5d6ff'Ta5d6ffsetup.pyTa5d6ff'Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffbuild_cmdTb4b4b4, Ta5d6ff'Ta5d6ff-vTa5d6ff'Tb4b4b4, Te6edf3_envTff7b72=Te6edf3envTb4b4b4,
Tff7b72*Tff7b72selfTff7b72.Td2a8ffsetup_extra_argsTb4b4b4)


Tff7b72class T56d364CppCompiledComponentsPythonRecipeTb4b4b4(Te6edf3CompiledComponentsPythonRecipeTb4b4b4)Tb4b4b4:
T8b949e""" Extensions that require the cxx-stl """
Te6edf3call_hostpython_via_targetpython Tff7b72= Tff7b72False
Te6edf3need_stl_shared Tff7b72= Tff7b72True


Tff7b72class T56d364CythonRecipeTb4b4b4(Te6edf3PythonRecipeTb4b4b4)Tb4b4b4:
Te6edf3pre_build_ext Tff7b72= Tff7b72False
Te6edf3cythonize Tff7b72= Tff7b72True
Te6edf3cython_args Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3call_hostpython_via_targetpython Tff7b72= Tff7b72False

Tff7b72def Td2a8ffbuild_archTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
T8b949e'''Build any cython components, then install the Python module by
calling setup.py install with the target Python dir.
'''
Te6edf3RecipeTff7b72.Td2a8ffbuild_archTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbuild_cython_componentsTb4b4b4(Te6edf3archTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinstall_python_packageTb4b4b4(Te6edf3archTb4b4b4)

Tff7b72def Td2a8ffbuild_cython_componentsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Te6edf3infoTb4b4b4(Ta5d6ff'Ta5d6ffCythonizing anything necessary in Tffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)Tb4b4b4)

Te6edf3env Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_recipe_envTb4b4b4(Te6edf3archTb4b4b4)

Tff7b72with Te6edf3current_directoryTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3hostpython Tff7b72= Te6edf3shTff7b72.Td2a8ffCommandTb4b4b4(Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffhostpythonTb4b4b4)
Te6edf3shprintTb4b4b4(Te6edf3hostpythonTb4b4b4, Ta5d6ff'Ta5d6ff-cTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffimport sys; print(sys.path)Ta5d6ff'Tb4b4b4, Te6edf3_envTff7b72=Te6edf3envTb4b4b4)
Te6edf3debugTb4b4b4(Ta5d6ff'Ta5d6ffcwd is Tffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3realpathTb4b4b4(Te6edf3curdirTb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3infoTb4b4b4(Ta5d6ff'Ta5d6ffTrying first build of Tffd700{}Ta5d6ff to get cython files: this is Ta5d6ff'
Ta5d6ff'Ta5d6ffexpected to failTa5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)Tb4b4b4)

Te6edf3manually_cythonise Tff7b72= Tff7b72False
Tff7b72tryTb4b4b4:
Te6edf3shprintTb4b4b4(Te6edf3hostpythonTb4b4b4, Ta5d6ff'Ta5d6ffsetup.pyTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffbuild_extTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff-vTa5d6ff'Tb4b4b4, Te6edf3_envTff7b72=Te6edf3envTb4b4b4,
Tff7b72*Tff7b72selfTff7b72.Td2a8ffsetup_extra_argsTb4b4b4)
Tff7b72except Te6edf3shTff7b72.Td2a8ffErrorReturnCode_1Tb4b4b4:
Tffa657printTb4b4b4(Tb4b4b4)
Te6edf3infoTb4b4b4(Ta5d6ff'Tffd700{}Ta5d6ff first build failed (as expected)Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)Tb4b4b4)
Te6edf3manually_cythonise Tff7b72= Tff7b72True

Tff7b72if Te6edf3manually_cythoniseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcythonize_buildTb4b4b4(Te6edf3envTff7b72=Te6edf3envTb4b4b4)
Te6edf3shprintTb4b4b4(Te6edf3hostpythonTb4b4b4, Ta5d6ff'Ta5d6ffsetup.pyTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffbuild_extTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff-vTa5d6ff'Tb4b4b4, Te6edf3_envTff7b72=Te6edf3envTb4b4b4,
Te6edf3_tailTff7b72=T79c0ff20Tb4b4b4, Te6edf3_criticalTff7b72=Tff7b72TrueTb4b4b4, Tff7b72*Tff7b72selfTff7b72.Td2a8ffsetup_extra_argsTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3infoTb4b4b4(Ta5d6ff'Ta5d6ffFirst build appeared to complete correctly, skipping manualTa5d6ff'
Ta5d6ff'Ta5d6ffcythonising.Ta5d6ff'Tb4b4b4)

Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffwith_debug_symbolsTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstrip_object_filesTb4b4b4(Te6edf3archTb4b4b4, Te6edf3envTb4b4b4)

Tff7b72def Td2a8ffstrip_object_filesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4, Te6edf3envTb4b4b4, Te6edf3build_dirTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3build_dir Tff7b72is Tff7b72NoneTb4b4b4:
Te6edf3build_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)
Tff7b72with Te6edf3current_directoryTb4b4b4(Te6edf3build_dirTb4b4b4)Tb4b4b4:
Te6edf3infoTb4b4b4(Ta5d6ff'Ta5d6ffStripping object filesTa5d6ff'Tb4b4b4)
Te6edf3shprintTb4b4b4(Te6edf3shTff7b72.Td2a8fffindTb4b4b4, Ta5d6ff'Ta5d6ff.Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff-inameTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff*.soTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff-execTa5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6ff/usr/bin/echoTa5d6ff'Tb4b4b4, Ta5d6ff'Tffd700{}Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff;Ta5d6ff'Tb4b4b4, Te6edf3_envTff7b72=Te6edf3envTb4b4b4)
Te6edf3shprintTb4b4b4(Te6edf3shTff7b72.Td2a8fffindTb4b4b4, Ta5d6ff'Ta5d6ff.Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff-inameTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff*.soTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff-execTa5d6ff'Tb4b4b4,
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffSTRIPTa5d6ff'Tb4b4b4]Tff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff'Ta5d6ff Ta5d6ff'Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Ta5d6ff'Ta5d6ff--strip-unneededTa5d6ff'Tb4b4b4,
T8b949e# '/usr/bin/strip', '--strip-unneeded',
Ta5d6ff'Tffd700{}Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff;Ta5d6ff'Tb4b4b4, Te6edf3_envTff7b72=Te6edf3envTb4b4b4)

Tff7b72def Td2a8ffcythonize_fileTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3envTb4b4b4, Te6edf3build_dirTb4b4b4, Te6edf3filenameTb4b4b4)Tb4b4b4:
Te6edf3short_filename Tff7b72= Te6edf3filename
Tff7b72if Te6edf3filenameTff7b72.Td2a8ffstartswithTb4b4b4(Te6edf3build_dirTb4b4b4)Tb4b4b4:
Te6edf3short_filename Tff7b72= Te6edf3filenameTb4b4b4[Tffa657lenTb4b4b4(Te6edf3build_dirTb4b4b4) Tff7b72+ T79c0ff1Tb4b4b4:Tb4b4b4]
Te6edf3infoTb4b4b4(Ta5d6ffuTa5d6ff"Ta5d6ffCythonize Tffd700{}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3short_filenameTb4b4b4)Tb4b4b4)
Te6edf3cyenv Tff7b72= Te6edf3envTff7b72.Td2a8ffcopyTb4b4b4(Tb4b4b4)
Tff7b72if Ta5d6ff'Ta5d6ffCYTHONPATHTa5d6ff' Tff7b72in Te6edf3cyenvTb4b4b4:
Te6edf3cyenvTb4b4b4[Ta5d6ff'Ta5d6ffPYTHONPATHTa5d6ff'Tb4b4b4] Tff7b72= Te6edf3cyenvTb4b4b4[Ta5d6ff'Ta5d6ffCYTHONPATHTa5d6ff'Tb4b4b4]
Tff7b72elif Ta5d6ff'Ta5d6ffPYTHONPATHTa5d6ff' Tff7b72in Te6edf3cyenvTb4b4b4:
Tff7b72del Te6edf3cyenvTb4b4b4[Ta5d6ff'Ta5d6ffPYTHONPATHTa5d6ff'Tb4b4b4]
Tff7b72if Ta5d6ff'Ta5d6ffPYTHONNOUSERSITETa5d6ff' Tff7b72in Te6edf3cyenvTb4b4b4:
Te6edf3cyenvTff7b72.Td2a8ffpopTb4b4b4(Ta5d6ff'Ta5d6ffPYTHONNOUSERSITETa5d6ff'Tb4b4b4)
Te6edf3python_command Tff7b72= Te6edf3shTff7b72.Td2a8ffCommandTb4b4b4(Ta5d6ff"Ta5d6ffpythonTffd700{}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffpython_recipeTff7b72.Td2a8ffmajor_minor_version_stringTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff.Ta5d6ff"Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]
Tb4b4b4)Tb4b4b4)
Te6edf3shprintTb4b4b4(Te6edf3python_commandTb4b4b4, Ta5d6ff"Ta5d6ff-cTa5d6ff"
Ta5d6ff"Ta5d6ffimport sys; from Cython.Compiler.Main import setuptools_main; sys.exit(setuptools_main());Ta5d6ff"Tb4b4b4,
Te6edf3filenameTb4b4b4, Tff7b72*Tff7b72selfTff7b72.Td2a8ffcython_argsTb4b4b4, Te6edf3_envTff7b72=Te6edf3cyenvTb4b4b4)

Tff7b72def Td2a8ffcythonize_buildTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3envTb4b4b4, Te6edf3build_dirTff7b72=Ta5d6ff"Ta5d6ff.Ta5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffcythonizeTb4b4b4:
Te6edf3infoTb4b4b4(Ta5d6ff'Ta5d6ffRunning cython cancelled per recipe settingTa5d6ff'Tb4b4b4)
Tff7b72return
Te6edf3infoTb4b4b4(Ta5d6ff'Ta5d6ffRunning cython where appropriateTa5d6ff'Tb4b4b4)
Tff7b72for Te6edf3rootTb4b4b4, Te6edf3dirnamesTb4b4b4, Te6edf3filenames Tff7b72in Te6edf3walkTb4b4b4(Ta5d6ff"Ta5d6ff.Ta5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3filename Tff7b72in Te6edf3fnmatchTff7b72.Td2a8fffilterTb4b4b4(Te6edf3filenamesTb4b4b4, Ta5d6ff"Ta5d6ff*.pyxTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcythonize_fileTb4b4b4(Te6edf3envTb4b4b4, Te6edf3build_dirTb4b4b4, Te6edf3joinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3filenameTb4b4b4)Tb4b4b4)

Tff7b72def Td2a8ffget_recipe_envTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4, Te6edf3with_flags_in_ccTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4:
Te6edf3env Tff7b72= Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffget_recipe_envTb4b4b4(Te6edf3archTb4b4b4, Te6edf3with_flags_in_ccTb4b4b4)
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffLDFLAGSTa5d6ff'Tb4b4b4] Tff7b72= Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffLDFLAGSTa5d6ff'Tb4b4b4] Tff7b72+ Ta5d6ff'Ta5d6ff -LTffd700{}Ta5d6ff Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffget_libs_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4) Tff7b72+
Ta5d6ff'Ta5d6ff -LTffd700{}Ta5d6ff Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8fflibs_dirTb4b4b4) Tff7b72+
Ta5d6ff'Ta5d6ff -LTffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffbootstrapTff7b72.Td2a8ffbuild_dirTb4b4b4, Ta5d6ff'Ta5d6ffobjTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6fflocalTa5d6ff'Tb4b4b4,
Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)Tb4b4b4)Tb4b4b4)

Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffLDSHAREDTa5d6ff'Tb4b4b4] Tff7b72= Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffCCTa5d6ff'Tb4b4b4] Tff7b72+ Ta5d6ff'Ta5d6ff -sharedTa5d6ff'
T8b949e# shprint(sh.whereis, env['LDSHARED'], _env=env)
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffLIBLINKTa5d6ff'Tb4b4b4] Tff7b72= Ta5d6ff'Ta5d6ffNOTNONETa5d6ff'
Tff7b72if Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffcopy_libsTb4b4b4:
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffCOPYLIBSTa5d6ff'Tb4b4b4] Tff7b72= Ta5d6ff'Ta5d6ff1Ta5d6ff'

T8b949e# Every recipe uses its own liblink path, object files are
T8b949e# collected and biglinked later
Te6edf3liblink_path Tff7b72= Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_build_container_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)Tb4b4b4,
Ta5d6ff'Ta5d6ffobjects_Tffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)Tb4b4b4)
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffLIBLINK_PATHTa5d6ff'Tb4b4b4] Tff7b72= Te6edf3liblink_path
Te6edf3ensure_dirTb4b4b4(Te6edf3liblink_pathTb4b4b4)

Tff7b72return Te6edf3env


Tff7b72class T56d364PyProjectRecipeTb4b4b4(Te6edf3PythonRecipeTb4b4b4)Tb4b4b4:
T8b949e'''Recipe for projects which containes `pyproject.toml`'''

T8b949e# Extra args to pass to `python -m build ...`
Te6edf3extra_build_args Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3call_hostpython_via_targetpython Tff7b72= Tff7b72False

Tff7b72def Td2a8ffget_recipe_envTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
T8b949e# Custom hostpython
Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffpython_recipeTff7b72.Td2a8ffpython_exe Tff7b72= Te6edf3joinTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffpython_recipeTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffandroid-buildTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffpython3Ta5d6ff"Tb4b4b4)
Te6edf3env Tff7b72= Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffget_recipe_envTb4b4b4(Te6edf3archTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Te6edf3build_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTb4b4b4)
Te6edf3ensure_dirTb4b4b4(Te6edf3build_dirTb4b4b4)
Te6edf3build_opts Tff7b72= Te6edf3joinTb4b4b4(Te6edf3build_dirTb4b4b4, Ta5d6ff"Ta5d6ffbuild-opts.cfgTa5d6ff"Tb4b4b4)

Tff7b72with Tffa657openTb4b4b4(Te6edf3build_optsTb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fileTb4b4b4:
Te6edf3fileTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6ff"Ta5d6ff[bdist_wheel]Tffea00\nTa5d6ffplat-name=Tffd700{}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffget_wheel_platform_tagTb4b4b4(Te6edf3archTb4b4b4)
Tb4b4b4)Tb4b4b4)
Te6edf3fileTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)

Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6ffDIST_EXTRA_CONFIGTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3build_opts
Tff7b72return Te6edf3env

Tff7b72def Td2a8ffget_wheel_platform_tagTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffandroid_Ta5d6ff" Tff7b72+ Tb4b4b4{
Ta5d6ff"Ta5d6ffarmeabi-v7aTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffarmTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffarm64-v8aTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffaarch64Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffx86_64Ta5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffx86_64Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffx86Ta5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffi686Ta5d6ff"Tb4b4b4,
Tb4b4b4}Tb4b4b4[Te6edf3archTff7b72.Td2a8ffarchTb4b4b4]

Tff7b72def Td2a8ffinstall_wheelTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4, Te6edf3built_wheelsTb4b4b4)Tb4b4b4:
Te6edf3_wheel Tff7b72= Te6edf3built_wheelsTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3built_wheel_dir Tff7b72= Te6edf3dirnameTb4b4b4(Te6edf3_wheelTb4b4b4)
T8b949e# Fix wheel platform tag
Te6edf3wheel_tag Tff7b72= Te6edf3wheel_tagsTb4b4b4(
Te6edf3_wheelTb4b4b4,
Te6edf3platform_tagsTff7b72=Tff7b72selfTff7b72.Td2a8ffget_wheel_platform_tagTb4b4b4(Te6edf3archTb4b4b4)Tb4b4b4,
Te6edf3removeTff7b72=Tff7b72TrueTb4b4b4,
Tb4b4b4)
Te6edf3selected_wheel Tff7b72= Te6edf3joinTb4b4b4(Te6edf3built_wheel_dirTb4b4b4, Te6edf3wheel_tagTb4b4b4)

Te6edf3_dev_wheel_dir Tff7b72= Te6edf3environTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffP4A_WHEEL_DIRTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72if Te6edf3_dev_wheel_dirTb4b4b4:
Te6edf3ensure_dirTb4b4b4(Te6edf3_dev_wheel_dirTb4b4b4)
Te6edf3shprintTb4b4b4(Te6edf3shTff7b72.Td2a8ffcpTb4b4b4, Te6edf3selected_wheelTb4b4b4, Te6edf3_dev_wheel_dirTb4b4b4)

Te6edf3infoTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffInstalling built wheel: Tffd700{Te6edf3wheel_tagTffd700}Ta5d6ff"Tb4b4b4)
Te6edf3destination Tff7b72= Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffget_python_install_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)
Tff7b72with Te6edf3WheelFileTb4b4b4(Te6edf3selected_wheelTb4b4b4) Tff7b72as Te6edf3wfTb4b4b4:
Tff7b72for Te6edf3zinfo Tff7b72in Te6edf3wfTff7b72.Td2a8fffilelistTb4b4b4:
Te6edf3wfTff7b72.Td2a8ffextractTb4b4b4(Te6edf3zinfoTb4b4b4, Te6edf3destinationTb4b4b4)
Te6edf3wfTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffbuild_archTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinstall_hostpython_prerequisitesTb4b4b4(
Te6edf3packagesTff7b72=Tb4b4b4[Ta5d6ff"Ta5d6ffbuild[virtualenv]Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffpipTa5d6ff"Tb4b4b4] Tff7b72+ Tff7b72selfTff7b72.Td2a8ffhostpython_prerequisites
Tb4b4b4)
Te6edf3build_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)
Te6edf3env Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_recipe_envTb4b4b4(Te6edf3archTb4b4b4, Te6edf3with_flags_in_ccTff7b72=Tff7b72TrueTb4b4b4)
T8b949e# make build dir separatly
Te6edf3sub_build_dir Tff7b72= Te6edf3joinTb4b4b4(Te6edf3build_dirTb4b4b4, Ta5d6ff"Ta5d6ffp4a_android_buildTa5d6ff"Tb4b4b4)
Te6edf3ensure_dirTb4b4b4(Te6edf3sub_build_dirTb4b4b4)
T8b949e# copy hostpython to built python to ensure correct selection of libs and includes
Te6edf3shprintTb4b4b4(Te6edf3shTff7b72.Td2a8ffcpTb4b4b4, Tff7b72selfTff7b72.Td2a8ffreal_hostpython_locationTb4b4b4, Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffpython_recipeTff7b72.Td2a8ffpython_exeTb4b4b4)

Te6edf3build_args Tff7b72= Tb4b4b4[
Ta5d6ff"Ta5d6ff-mTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffbuildTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff--wheelTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff--config-settingTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffbuilddir=Tffd700{}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3sub_build_dirTb4b4b4)Tb4b4b4,
Tb4b4b4] Tff7b72+ Tff7b72selfTff7b72.Td2a8ffextra_build_args

Te6edf3built_wheels Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72with Te6edf3current_directoryTb4b4b4(Te6edf3build_dirTb4b4b4)Tb4b4b4:
Te6edf3shprintTb4b4b4(
Te6edf3shTff7b72.Td2a8ffCommandTb4b4b4(Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffpython_recipeTff7b72.Td2a8ffpython_exeTb4b4b4)Tb4b4b4, Tff7b72*Te6edf3build_argsTb4b4b4, Te6edf3_envTff7b72=Te6edf3env
Tb4b4b4)
Te6edf3built_wheels Tff7b72= Tb4b4b4[Te6edf3realpathTb4b4b4(Te6edf3whlTb4b4b4) Tff7b72for Te6edf3whl Tff7b72in Te6edf3globTff7b72.Td2a8ffglobTb4b4b4(Ta5d6ff"Ta5d6ffdist/*.whlTa5d6ff"Tb4b4b4)Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffinstall_wheelTb4b4b4(Te6edf3archTb4b4b4, Te6edf3built_wheelsTb4b4b4)


Tff7b72class T56d364MesonRecipeTb4b4b4(Te6edf3PyProjectRecipeTb4b4b4)Tb4b4b4:
T8b949e'''Recipe for projects which uses meson as build system'''

Te6edf3meson_version Tff7b72= Ta5d6ff"Ta5d6ff1.4.0Ta5d6ff"
Te6edf3ninja_version Tff7b72= Ta5d6ff"Ta5d6ff1.11.1.1Ta5d6ff"

Tff7b72def Td2a8ffsanitize_flagsTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3flag_stringsTb4b4b4)Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3flag_stringsTb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4)

Tff7b72def Td2a8ffget_recipe_meson_optionsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Te6edf3env Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_recipe_envTb4b4b4(Te6edf3archTb4b4b4, Te6edf3with_flags_in_ccTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffbinariesTa5d6ff"Tb4b4b4: Tb4b4b4{
Ta5d6ff"Ta5d6ffcTa5d6ff"Tb4b4b4: Te6edf3archTff7b72.Td2a8ffget_clang_exeTb4b4b4(Te6edf3with_targetTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffcppTa5d6ff"Tb4b4b4: Te6edf3archTff7b72.Td2a8ffget_clang_exeTb4b4b4(Te6edf3with_targetTff7b72=Tff7b72TrueTb4b4b4, Te6edf3plus_plusTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffarTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffndkTff7b72.Td2a8ffllvm_arTb4b4b4,
Ta5d6ff"Ta5d6ffstripTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffndkTff7b72.Td2a8ffllvm_stripTb4b4b4,
Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffbuilt-in optionsTa5d6ff"Tb4b4b4: Tb4b4b4{
Ta5d6ff"Ta5d6ffc_argsTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffsanitize_flagsTb4b4b4(Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6ffCFLAGSTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6ffCPPFLAGSTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffcpp_argsTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffsanitize_flagsTb4b4b4(Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6ffCXXFLAGSTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6ffCPPFLAGSTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffc_link_argsTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffsanitize_flagsTb4b4b4(Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6ffLDFLAGSTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffcpp_link_argsTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffsanitize_flagsTb4b4b4(Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6ffLDFLAGSTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffpropertiesTa5d6ff"Tb4b4b4: Tb4b4b4{
Ta5d6ff"Ta5d6ffneeds_exe_wrapperTa5d6ff"Tb4b4b4: Tff7b72TrueTb4b4b4,
Ta5d6ff"Ta5d6ffsys_rootTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffndkTff7b72.Td2a8ffsysroot
Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffhost_machineTa5d6ff"Tb4b4b4: Tb4b4b4{
Ta5d6ff"Ta5d6ffcpu_familyTa5d6ff"Tb4b4b4: Tb4b4b4{
Ta5d6ff"Ta5d6ffarm64-v8aTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffaarch64Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffarmeabi-v7aTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffarmTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffx86_64Ta5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffx86_64Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffx86Ta5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffx86Ta5d6ff"
Tb4b4b4}Tb4b4b4[Te6edf3archTff7b72.Td2a8ffarchTb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffcpuTa5d6ff"Tb4b4b4: Tb4b4b4{
Ta5d6ff"Ta5d6ffarm64-v8aTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffaarch64Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffarmeabi-v7aTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffarmv7Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffx86_64Ta5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffx86_64Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffx86Ta5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffi686Ta5d6ff"
Tb4b4b4}Tb4b4b4[Te6edf3archTff7b72.Td2a8ffarchTb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffendianTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6fflittleTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffsystemTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4,
Tb4b4b4}
Tb4b4b4}

Tff7b72def Td2a8ffwrite_build_optionsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
T8b949e"""Writes python dict to meson config file"""
Te6edf3option_data Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3build_options Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_recipe_meson_optionsTb4b4b4(Te6edf3archTb4b4b4)
Tff7b72for Te6edf3key Tff7b72in Te6edf3build_optionsTff7b72.Td2a8ffkeysTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3data_chunk Tff7b72= Ta5d6ff"Ta5d6ff[Tffd700{}Ta5d6ff]Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3keyTb4b4b4)
Tff7b72for Te6edf3subkey Tff7b72in Te6edf3build_optionsTb4b4b4[Te6edf3keyTb4b4b4]Tff7b72.Td2a8ffkeysTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3value Tff7b72= Te6edf3build_optionsTb4b4b4[Te6edf3keyTb4b4b4]Tb4b4b4[Te6edf3subkeyTb4b4b4]
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3valueTb4b4b4, Tffa657intTb4b4b4)Tb4b4b4:
Te6edf3value Tff7b72= Tffa657strTb4b4b4(Te6edf3valueTb4b4b4)
Tff7b72elif Tffa657isinstanceTb4b4b4(Te6edf3valueTb4b4b4, Tffa657strTb4b4b4)Tb4b4b4:
Te6edf3value Tff7b72= Ta5d6ff"Ta5d6ff'Tffd700{}Ta5d6ff'Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3valueTb4b4b4)
Tff7b72elif Tffa657isinstanceTb4b4b4(Te6edf3valueTb4b4b4, Tffa657boolTb4b4b4)Tb4b4b4:
Te6edf3value Tff7b72= Ta5d6ff"Ta5d6fftrueTa5d6ff" Tff7b72if Te6edf3value Tff7b72else Ta5d6ff"Ta5d6fffalseTa5d6ff"
Tff7b72elif Tffa657isinstanceTb4b4b4(Te6edf3valueTb4b4b4, Tffa657listTb4b4b4)Tb4b4b4:
Te6edf3value Tff7b72= Ta5d6ff"Ta5d6ff[Ta5d6ff'Ta5d6ff" Tff7b72+ Ta5d6ff"Ta5d6ff'Ta5d6ff, Ta5d6ff'Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3valueTb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff'Ta5d6ff]Ta5d6ff"
Te6edf3data_chunk Tff7b72+Tff7b72= Ta5d6ff"Tffea00\nTa5d6ff" Tff7b72+ Te6edf3subkey Tff7b72+ Ta5d6ff"Ta5d6ff = Ta5d6ff" Tff7b72+ Te6edf3value
Te6edf3option_data Tff7b72+Tff7b72= Te6edf3data_chunk Tff7b72+ Ta5d6ff"Tffea00\nTffea00\nTa5d6ff"
Tff7b72return Te6edf3option_data

Tff7b72def Td2a8ffensure_argsTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3arg Tff7b72in Te6edf3argsTb4b4b4:
Tff7b72if Te6edf3arg Tff7b72not Tff7b72in Tff7b72selfTff7b72.Td2a8ffextra_build_argsTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffextra_build_argsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3argTb4b4b4)

Tff7b72def Td2a8ffbuild_archTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Te6edf3cross_file Tff7b72= Te6edf3joinTb4b4b4(Ta5d6ff"Ta5d6ff/tmpTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffandroid.meson.crossTa5d6ff"Tb4b4b4)
Te6edf3infoTb4b4b4(Ta5d6ff"Ta5d6ffWriting cross file at: Tffd700{}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3cross_fileTb4b4b4)Tb4b4b4)
T8b949e# write cross config file
Tff7b72with Tffa657openTb4b4b4(Te6edf3cross_fileTb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fileTb4b4b4:
Te6edf3fileTff7b72.Td2a8ffwriteTb4b4b4(Tff7b72selfTff7b72.Td2a8ffwrite_build_optionsTb4b4b4(Te6edf3archTb4b4b4)Tb4b4b4)
Te6edf3fileTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
T8b949e# set cross file
Tff7b72selfTff7b72.Td2a8ffensure_argsTb4b4b4(Ta5d6ff'Ta5d6ff-Csetup-args=--cross-fileTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff-Csetup-args=Tffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3cross_fileTb4b4b4)Tb4b4b4)
T8b949e# ensure ninja and meson
Tff7b72for Te6edf3dep Tff7b72in Tb4b4b4[
Ta5d6ff"Ta5d6ffninja==Tffd700{}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffninja_versionTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffmeson==Tffd700{}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmeson_versionTb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4:
Tff7b72if Te6edf3dep Tff7b72not Tff7b72in Tff7b72selfTff7b72.Td2a8ffhostpython_prerequisitesTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhostpython_prerequisitesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3depTb4b4b4)
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffbuild_archTb4b4b4(Te6edf3archTb4b4b4)


Tff7b72class T56d364RustCompiledComponentsRecipeTb4b4b4(Te6edf3PyProjectRecipeTb4b4b4)Tb4b4b4:
T8b949e# Rust toolchain codes
T8b949e# https://doc.rust-lang.org/nightly/rustc/platform-support.html
Te6edf3RUST_ARCH_CODES Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffarm64-v8aTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffaarch64-linux-androidTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffarmeabi-v7aTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffarmv7-linux-androideabiTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffx86_64Ta5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffx86_64-linux-androidTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffx86Ta5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffi686-linux-androidTa5d6ff"Tb4b4b4,
Tb4b4b4}

Te6edf3call_hostpython_via_targetpython Tff7b72= Tff7b72False

Tff7b72def Td2a8ffget_recipe_envTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Te6edf3env Tff7b72= Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffget_recipe_envTb4b4b4(Te6edf3archTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)

T8b949e# Set rust build target
Te6edf3build_target Tff7b72= Tff7b72selfTff7b72.Td2a8ffRUST_ARCH_CODESTb4b4b4[Te6edf3archTff7b72.Td2a8ffarchTb4b4b4]
Te6edf3cargo_linker_name Tff7b72= Ta5d6ff"Ta5d6ffCARGO_TARGET_Tffd700{}Ta5d6ff_LINKERTa5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(
Te6edf3build_targetTff7b72.Td2a8ffupperTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff-Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff_Ta5d6ff"Tb4b4b4)
Tb4b4b4)
Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6ffCARGO_BUILD_TARGETTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3build_target
Te6edf3envTb4b4b4[Te6edf3cargo_linker_nameTb4b4b4] Tff7b72= Te6edf3joinTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffndkTff7b72.Td2a8ffllvm_prebuilt_dirTb4b4b4,
Ta5d6ff"Ta5d6ffbinTa5d6ff"Tb4b4b4,
Ta5d6ff"Tffd700{}Tffd700{}Ta5d6ff-clangTa5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(
T8b949e# NDK's Clang format
Te6edf3build_targetTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff7Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff7aTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3build_targetTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffarmv7Ta5d6ff"Tb4b4b4)
Tff7b72else Te6edf3build_targetTb4b4b4,
Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffndk_apiTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3realpython_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffpython_recipeTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)

Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6ffRUSTFLAGSTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff-Clink-args=-LTffd700{}Ta5d6ff -LTffd700{}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffget_libs_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)Tb4b4b4, Te6edf3joinTb4b4b4(Te6edf3realpython_dirTb4b4b4, Ta5d6ff"Ta5d6ffandroid-buildTa5d6ff"Tb4b4b4)
Tb4b4b4)

Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6ffPYO3_CROSS_LIB_DIRTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3realpathTb4b4b4(Te6edf3globTff7b72.Td2a8ffglobTb4b4b4(Te6edf3joinTb4b4b4(
Te6edf3realpython_dirTb4b4b4, Ta5d6ff"Ta5d6ffandroid-buildTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffbuildTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fflib.linux-*-Tffd700{}Ta5d6ff/Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffpython_major_minor_versionTb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)

Te6edf3info_mainTb4b4b4(Ta5d6ff"Ta5d6ffEnsuring rust build toolchainTa5d6ff"Tb4b4b4)
Te6edf3shprintTb4b4b4(Te6edf3shTff7b72.Td2a8ffrustupTb4b4b4, Ta5d6ff"Ta5d6fftargetTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffaddTa5d6ff"Tb4b4b4, Te6edf3build_targetTb4b4b4)

T8b949e# Add host python to PATH
Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6ffPATHTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4(Ta5d6ff"Tffd700{hostpython_dir}Ta5d6ff:Tffd700{old_path}Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffformatTb4b4b4(
Te6edf3hostpython_dirTff7b72=Te6edf3RecipeTff7b72.Td2a8ffget_recipeTb4b4b4(
Ta5d6ff"Ta5d6ffhostpython3Ta5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffctx
Tb4b4b4)Tff7b72.Td2a8ffget_path_to_pythonTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3old_pathTff7b72=Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6ffPATHTa5d6ff"Tb4b4b4]Tb4b4b4,
Tb4b4b4)
Tff7b72return Te6edf3env

Tff7b72def Td2a8ffcheck_host_depsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tffa657hasattrTb4b4b4(Te6edf3shTb4b4b4, Ta5d6ff"Ta5d6ffrustupTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3errorTb4b4b4(
Ta5d6ff"Ta5d6ff`rustup` was not found on host system.Ta5d6ff"
Ta5d6ff"Ta5d6ffPlease install it using :Ta5d6ff"
Ta5d6ff"Tffea00\nTa5d6ff`curl https://sh.rustup.rs -sSf | sh`Tffea00\nTa5d6ff"
Tb4b4b4)
Te6edf3exitTb4b4b4(T79c0ff1Tb4b4b4)

Tff7b72def Td2a8ffbuild_archTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcheck_host_depsTb4b4b4(Tb4b4b4)
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffbuild_archTb4b4b4(Te6edf3archTb4b4b4)


Tff7b72class T56d364TargetPythonRecipeTb4b4b4(Te6edf3RecipeTb4b4b4)Tb4b4b4:
T8b949e'''Class for target python recipes. Sets ctx.python_recipe to point to
itself, so as to know later what kind of Python was built or used.'''

Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_ctx Tff7b72= Tff7b72None
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72*Te6edf3argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)

Tff7b72def Td2a8ffprebuild_archTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffprebuild_archTb4b4b4(Te6edf3archTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffpython_recipe Tff7b72= Tff7b72self

Tff7b72def Td2a8ffinclude_rootTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
T8b949e'''The root directory from which to include headers.'''
Tff7b72raise Tf85149NotImplementedErrorTb4b4b4(Ta5d6ff'Ta5d6ffNot implemented in TargetPythonRecipeTa5d6ff'Tb4b4b4)

Tff7b72def Td2a8fflink_rootTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149NotImplementedErrorTb4b4b4(Ta5d6ff'Ta5d6ffNot implemented in TargetPythonRecipeTa5d6ff'Tb4b4b4)

Tf0883e@property
Tff7b72def Td2a8ffmajor_minor_version_stringTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3parsed_version Tff7b72= Te6edf3packagingTff7b72.Td2a8ffversionTff7b72.Td2a8ffparseTb4b4b4(Tff7b72selfTff7b72.Td2a8ffversionTb4b4b4)
Tff7b72return Ta5d6fffTa5d6ff"Tffd700{Te6edf3parsed_versionTff7b72.Td2a8ffmajorTffd700}Ta5d6ff.Tffd700{Te6edf3parsed_versionTff7b72.Td2a8ffminorTffd700}Ta5d6ff"

Tff7b72def Td2a8ffcreate_python_bundleTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dirnTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
T8b949e"""
Create a packaged python bundle in the target directory, by
copying all the modules and standard library to the right
place.
"""
Tff7b72raise Tf85149NotImplementedErrorTb4b4b4(Ta5d6ff'Tffd700{}Ta5d6ff does not implement create_python_bundleTa5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4)

Tff7b72def Td2a8ffreduce_object_file_namesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dirnTb4b4b4)Tb4b4b4:
T8b949e"""Recursively renames all files named XXX.cpython-...-linux-gnu.so"
to "XXX.so", i.e. removing the erroneous architecture name
coming from the local system.
"""
Te6edf3py_so_files Tff7b72= Te6edf3shprintTb4b4b4(Te6edf3shTff7b72.Td2a8fffindTb4b4b4, Te6edf3dirnTb4b4b4, Ta5d6ff'Ta5d6ff-inameTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff*.soTa5d6ff'Tb4b4b4)
Te6edf3filens Tff7b72= Te6edf3py_so_filesTff7b72.Td2a8ffstdoutTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff'Ta5d6ffutf-8Ta5d6ff'Tb4b4b4)Tff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff'Tffea00\nTa5d6ff'Tb4b4b4)Tb4b4b4[Tb4b4b4:Tff7b72-T79c0ff1Tb4b4b4]
Tff7b72for Te6edf3filen Tff7b72in Te6edf3filensTb4b4b4:
Te6edf3file_dirnameTb4b4b4, Te6edf3file_basename Tff7b72= Te6edf3splitTb4b4b4(Te6edf3filenTb4b4b4)
Te6edf3parts Tff7b72= Te6edf3file_basenameTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff'Ta5d6ff.Ta5d6ff'Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3partsTb4b4b4) Tff7b72<Tff7b72= T79c0ff2Tb4b4b4:
Tff7b72continue
T8b949e# PySide6 libraries end with .abi3.so
Tff7b72if Te6edf3partsTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffabi3Ta5d6ff"Tb4b4b4:
Tff7b72continue
Te6edf3moveTb4b4b4(Te6edf3filenTb4b4b4, Te6edf3joinTb4b4b4(Te6edf3file_dirnameTb4b4b4, Te6edf3partsTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72+ Ta5d6ff'Ta5d6ff.soTa5d6ff'Tb4b4b4)Tb4b4b4)


Tff7b72def Td2a8ffalgsumTb4b4b4(Te6edf3algTb4b4b4, Te6edf3filenTb4b4b4)Tb4b4b4:
T8b949e'''Calculate the digest of a file.
'''
Tff7b72with Tffa657openTb4b4b4(Te6edf3filenTb4b4b4, Ta5d6ff'Ta5d6ffrbTa5d6ff'Tb4b4b4) Tff7b72as Te6edf3filehTb4b4b4:
Te6edf3digest Tff7b72= Tffa657getattrTb4b4b4(Te6edf3hashlibTb4b4b4, Te6edf3algTb4b4b4)Tb4b4b4(Te6edf3filehTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)Tb4b4b4)

Tff7b72return Te6edf3digestTff7b72.Td2a8ffhexdigestTb4b4b4(Tb4b4b4)


Tff7b72class T56d364FFPyPlayerRecipeTb4b4b4(Te6edf3PyProjectRecipeTb4b4b4)Tb4b4b4:
Te6edf3version Tff7b72= Ta5d6ff'Ta5d6ffv4.5.1Ta5d6ff'
Te6edf3url Tff7b72= Ta5d6ff'Ta5d6ffhttps://github.com/matham/ffpyplayer/archive/Tffd700{version}Ta5d6ff.zipTa5d6ff'
Te6edf3depends Tff7b72= Tb4b4b4[Ta5d6ff'Ta5d6ffpython3Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffsdl2Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffffmpegTa5d6ff'Tb4b4b4]
Te6edf3patches Tff7b72= Tb4b4b4[Ta5d6ff"Ta5d6ffsetup.py.patchTa5d6ff"Tb4b4b4]
Te6edf3opt_depends Tff7b72= Tb4b4b4[Ta5d6ff'Ta5d6ffopensslTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffffpyplayer_codecsTa5d6ff'Tb4b4b4]

Tff7b72def Td2a8ffget_recipe_envTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4, Te6edf3with_flags_in_ccTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4:
Te6edf3env Tff7b72= Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffget_recipe_envTb4b4b4(Te6edf3archTb4b4b4)

Te6edf3build_dir Tff7b72= Te6edf3RecipeTff7b72.Td2a8ffget_recipeTb4b4b4(Ta5d6ff'Ta5d6ffffmpegTa5d6ff'Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffctxTb4b4b4)Tff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)
Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6ffFFMPEG_INCLUDE_DIRTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3joinTb4b4b4(Te6edf3build_dirTb4b4b4, Ta5d6ff"Ta5d6ffincludeTa5d6ff"Tb4b4b4)
Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6ffFFMPEG_LIB_DIRTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3joinTb4b4b4(Te6edf3build_dirTb4b4b4, Ta5d6ff"Ta5d6fflibTa5d6ff"Tb4b4b4)

Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6ffSDL_INCLUDE_DIRTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffbootstrapTff7b72.Td2a8ffbuild_dirTb4b4b4, Ta5d6ff'Ta5d6ffjniTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffSDLTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffincludeTa5d6ff'Tb4b4b4)
Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6ffSDL_LIB_DIRTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffbootstrapTff7b72.Td2a8ffbuild_dirTb4b4b4, Ta5d6ff'Ta5d6fflibsTa5d6ff'Tb4b4b4, Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)

Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6ffUSE_SDL2_MIXERTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff'Ta5d6ff1Ta5d6ff'

T8b949e# ffpyplayer does not allow to pass more than one include dir for sdl2_mixer (and ATM is
T8b949e# not needed), so we only pass the first one.
Te6edf3sdl2_mixer_recipe Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_recipeTb4b4b4(Ta5d6ff'Ta5d6ffsdl2_mixerTa5d6ff'Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffctxTb4b4b4)
Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6ffSDL2_MIXER_INCLUDE_DIRTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3sdl2_mixer_recipeTff7b72.Td2a8ffget_include_dirsTb4b4b4(Te6edf3archTb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]

T8b949e# NDKPLATFORM and LIBLINK are our switches for detecting Android platform, so can't be empty
T8b949e# FIXME: We may want to introduce a cleaner approach to this?
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffNDKPLATFORMTa5d6ff'Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffNOTNONETa5d6ff"
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffLIBLINKTa5d6ff'Tb4b4b4] Tff7b72= Ta5d6ff'Ta5d6ffNOTNONETa5d6ff'

T8b949e# ffmpeg recipe enables GPL components only if ffpyplayer_codecs recipe used.
T8b949e# Therefor we need to disable libpostproc if skipped.
Tff7b72if Ta5d6ff'Ta5d6ffffpyplayer_codecsTa5d6ff' Tff7b72not Tff7b72in Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffrecipe_build_orderTb4b4b4:
Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6ffCONFIG_POSTPROCTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff'Ta5d6ff0Ta5d6ff'

Tff7b72return Te6edf3env


Te6edf3recipe Tff7b72= Te6edf3FFPyPlayerRecipeTb4b4b4(Tb4b4b4)


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────